packages feed

rating-chgk-info-0.3.6.3: examples/GetAllClaims.hs

-- Директива компилятора для использования Text в строковых литералах
{-# LANGUAGE OverloadedStrings #-}

-- Библиотеки
import RatingChgkInfo
import qualified Data.Text as T
import qualified Data.Text.IO as T

-- Точка входа
main :: IO ()
main = do
  -- Получаем список турниров
  Right ts <- runRatingApi $ getAllItems tournaments
  -- Проходимся по нему
  forM_ ts $ \TournamentShort{trs_idtournament = ident} -> do
    -- Поскольку здесь запускается отдельный runRatingApi, возможные ошибки
    -- одного турнира не приведут к остановке работы для следующих турниров, эти
    -- запуски независимы
    er <- runRatingApi $ do
      -- Выводим идентификатор турнира
      liftIO $ print ident
      -- Получаем список спорных и выводим их количество
      cs <- tournamentControversials ident
      liftIO $ T.putStrLn $ T.concat [ "Controversials ok: ", T.pack $ show $ length cs ]
      -- Получаем список апелляций и выводим их количество
      as <- tournamentAppeals ident
      liftIO $ T.putStrLn $ T.concat [ "Appeals ok: ", T.pack $ show $ length as ]
    -- Если удалось получить и спорные, и апелляции, выводим OK, иначе FAIL
    T.putStrLn $ either (const "FAIL") (const "OK") er

-- Ещё один пример: получаем новые спорные и апелляции на турнирах с 2016 по 2019 гг.
test2 :: IO ()
test2 = void $ runRatingApi $ do
  ts <- getAllItems tournaments
  let Just s2016   = readMaybe "2016-01-01 00:00:00"
      Just jan2019 = readMaybe "2019-01-11 00:00:00"
      ss = [ t
           | t <- ts
           , trs_typeName t `elem` [Synchronous, StrictlySynchronous, Asynchronous]
           , trs_dateStart t >= s2016
           , trs_dateEnd t <= jan2019
           ]
  forM_ ss $ \TournamentShort{trs_idtournament = ident, trs_dateStart = start} -> do
    liftIO $ T.putStr "."
    cs <- tournamentControversials ident
    as <- tournamentAppeals ident
    let ncs = filter ((==ClaimNew) . conStatus) cs
        nas = filter ((==ClaimNew) . appStatus) as
    when (length ncs + length nas > 0) $ do
      liftIO $ T.putStrLn ""
      liftIO $ print ((ident, start), (length ncs, length cs), (length nas, length as))