module TeaCleaner.Filter ( FilterResult(..) , UserFilter(..) , filterByActivities , filterByUserProperties ) where import qualified Data.Text as Text import Data.Time (LocalTime(..), ZonedTime(..)) import Data.Time.Calendar.OrdinalDate (fromOrdinalDate) import qualified Data.Vector as Vector import TeaCleaner.Client (Activity(..), User(..), getActivities) import TeaCleaner.Configuration (Settings(..)) data UserFilter = PassFilter | SuspiciousFilter | FailedFilter deriving (Eq, Show) data FilterResult = FilterResult User UserFilter deriving (Show) filterByUserProperties :: User -> FilterResult filterByUserProperties user@User{ created, lastLogin, description, website } | zonedDay created == zonedDay lastLogin , zonedDay created > fromOrdinalDate 2024 1 , zonedDay created < fromOrdinalDate 2025 17 , not (Text.null description) , not (Text.null website) = FilterResult user SuspiciousFilter | otherwise = FilterResult user PassFilter where zonedDay = localDay . zonedTimeToLocalTime filterByActivities :: Settings -> User -> IO FilterResult filterByActivities settings user = getActivities settings user >>= evalActivities where evalActivities activities | Just (Activity{ opType }, rest) <- Vector.uncons activities , Vector.null rest , opType == "create_repo" = pure $ FilterResult user SuspiciousFilter evalActivities _ = pure $ FilterResult user PassFilter