diff options
Diffstat (limited to 'tea-cleaner/TeaCleaner/Filter.hs')
| -rw-r--r-- | tea-cleaner/TeaCleaner/Filter.hs | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/tea-cleaner/TeaCleaner/Filter.hs b/tea-cleaner/TeaCleaner/Filter.hs index c4f243e..8448ff5 100644 --- a/tea-cleaner/TeaCleaner/Filter.hs +++ b/tea-cleaner/TeaCleaner/Filter.hs @@ -1,32 +1,43 @@ module TeaCleaner.Filter - ( filterByActivities + ( FilterResult(..) + , UserFilter(..) + , filterByActivities , filterByUserProperties ) where -import Data.Text (StrictText) import qualified Data.Text as Text import Data.Time (LocalTime(..), ZonedTime(..)) import Data.Time.Calendar.OrdinalDate (fromOrdinalDate) import qualified Data.Vector as Vector -import Text.URI (URI) import TeaCleaner.Client (Activity(..), User(..), getActivities) +import TeaCleaner.Configuration (Settings(..)) -filterByUserProperties :: User -> Bool -filterByUserProperties 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) +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 :: URI -> StrictText -> User -> IO Bool -filterByActivities server token user - = getActivities server token user +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 = pure $ opType == "create_repo" - evalActivities _ = pure False + , Vector.null rest + , opType == "create_repo" = pure $ FilterResult user SuspiciousFilter + evalActivities _ = pure $ FilterResult user PassFilter |
