aboutsummaryrefslogtreecommitdiff
path: root/tea-cleaner/Main.hs
blob: 08c3b8910988ca0278bfb0b4c0ce297e8c81d22e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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