48 lines
2.0 KiB
Haskell

module Main
( main
) where
import Data.Text (StrictText)
import Data.Vector (Vector)
import qualified Data.Text as Text
import Text.URI (URI, mkURI)
import qualified Data.Vector as Vector
import qualified Data.Text.IO as Text.IO
import qualified Data.Text.Lazy.IO as Text.Lazy.IO
import qualified Data.Text.Lazy.Builder as Text.Builder
import qualified Data.Text.Lazy.Builder.Int as Text.Builder
import GHC.Records (HasField(..))
import TeaCleaner.Filter (filterByActivities, filterByUserProperties)
import TeaCleaner.Client (User(..), getUsers, purgeUser)
import TeaCleaner.CommandLine (ProgramOptions(..), commandLineInfo, execParser)
printUsers :: URI -> StrictText -> Bool -> Vector User -> IO ()
printUsers server token liveRun users = printCount
>> Vector.forM_ users (printUser liveRun)
where
printCount =
let count = Text.Builder.decimal $ Vector.length users
in Text.Lazy.IO.putStrLn
$ Text.Builder.toLazyText
$ "Count: " <> count
buildValue user = getField @"username" user <> "\n"
<> " Website: " <> getField @"website" user <> "\n"
<> " Created: " <> Text.pack (show $ getField @"created" user) <> "\n"
<> " Last login: " <> Text.pack (show $ getField @"lastLogin" user) <> "\n"
<> " Email: " <> getField @"email" user <> "\n"
<> " Website: " <> getField @"website" user <> "\n"
<> " Description: " <> getField @"description" user <> "\n"
<> " Avatar: " <> getField @"avatarUrl" user <> "\n"
<> "\n"
printUser True user = Text.IO.putStrLn (buildValue user)
>> purgeUser server token user
printUser False user = Text.IO.putStrLn (buildValue user)
main :: IO ()
main = execParser commandLineInfo >>= withArguments
where
withArguments ProgramOptions{..} = mkURI server >>= withServer liveRun token
withServer liveRun token server = getUsers server token
>>= Vector.filterM (filterByActivities server token) . Vector.filter filterByUserProperties
>>= printUsers server token liveRun