Copyright | (c) Mansur Ziiatdinov 2018-2019 |
---|---|
License | BSD-3 |
Maintainer | chgk@pm.me |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Типы в этом модуле практически совпадают с теми, которые возвращаются сайтом рейтинга. Поэтому и проблемы у них (такие, как использование строк вместо целых и т.п.) общие. Часть этих проблем задокументирована при помощи пометок API NOTE.
Возможно, в следующих версиях библиотеки будут какие-то способы обезопасить себя от ошибок, либо (надеюсь) в результате развития API сайта рейтинга, либо без этого.
Synopsis
- type RatingClient = ClientM
- data Items a = Items {}
- newtype SeasonMap a = SeasonMap {
- unSeasonMap :: Map Int a
- type RatingApi = ("players" :> (QueryParam "page" Int :> Get '[JSON] (Items Player))) :<|> (("players" :> (Capture "idplayer" PlayerId :> Get '[JSON] [Player])) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> Get '[JSON] [PlayerTeam]))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> ("last" :> Get '[JSON] [PlayerTeam])))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> (Capture "idseason" Int :> Get '[JSON] [PlayerTeam])))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> Get '[JSON] (SeasonMap PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> ("last" :> Get '[JSON] PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> (Capture "idseason" Int :> Get '[JSON] PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> Get '[JSON] [PlayerRating]))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> ("last" :> Get '[JSON] PlayerRating)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> (Capture "idrelease" Int :> Get '[JSON] PlayerRating)))) :<|> (("teams" :> (QueryParam "page" Int :> Get '[JSON] (Items Team))) :<|> (("teams" :> (Capture "idteam" TeamId :> Get '[JSON] [Team])) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> Get '[JSON] (SeasonMap TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> ("last" :> Get '[JSON] TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> (Capture "idseason" Int :> Get '[JSON] TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> Get '[JSON] (SeasonMap TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> ("last" :> Get '[JSON] TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> (Capture "idseason" Int :> Get '[JSON] TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> Get '[JSON] [TeamRating]))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> ("a" :> Get '[JSON] TeamRating)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> ("b" :> Get '[JSON] TeamRating)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> (Capture "idrelease" Int :> Get '[JSON] TeamRating)))) :<|> (("tournaments" :> (QueryParam "page" Int :> Get '[JSON] (Items TournamentShort))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> Get '[JSON] [Tournament])) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> Get '[JSON] [TournamentResult]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("town" :> (Capture "idtown" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("region" :> (Capture "idregion" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("country" :> (Capture "idcountry" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("recaps" :> Get '[JSON] [RecapTeam]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("recaps" :> (Capture "idteam" TeamId :> Get '[JSON] [RecapPlayer])))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("results" :> (Capture "idteam" TeamId :> Get '[JSON] [TourResult])))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("controversials" :> Get '[JSON] [Controversial]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("appeals" :> Get '[JSON] [Appeal]))) :<|> (("teams" :> ("search" :> (QueryParam "name" Text :> (QueryParam "town" Text :> (QueryParam "region_name" Text :> (QueryParam "country_name" Text :> (QueryFlag "active_this_season" :> (QueryParam "page" Int :> Get '[JSON] (Items Team))))))))) :<|> (("players" :> ("search" :> (QueryParam "surname" Text :> (QueryParam "name" Text :> (QueryParam "patronymic" Text :> (QueryParam "page" Int :> Get '[JSON] (Items Player))))))) :<|> ("tournaments" :> ("search" :> (QueryParam "type_name" TournamentType :> (QueryParam "archive" Int :> (QueryParam "page" Int :> Get '[JSON] (Items TournamentShort)))))))))))))))))))))))))))))))))))))))))
- data Player = Player {}
- data PlayerTeam = PlayerTeam {}
- data PlayerSeason = PlayerSeason {}
- data PlayerTournament = PlayerTournament {}
- data PlayerRating = PlayerRating {}
- data Team = Team {}
- data TeamBaseRecap = TeamBaseRecap {
- tbr_idteam :: TeamId
- tbr_idseason :: Text
- tbr_players :: [Text]
- tbr_captain :: Text
- data TeamTournament = TeamTournament {
- tt_idteam :: TeamId
- tt_idseason :: Text
- tt_tournaments :: [Text]
- data TeamRating = TeamRating {}
- data TournamentShort = TournamentShort {}
- data Tournament = Tournament {
- trn_idtournament :: TournamentId
- trn_name :: Text
- trn_town :: Text
- trn_longName :: Text
- trn_dateStart :: LocalTime
- trn_dateEnd :: LocalTime
- trn_tournamentInRating :: Text
- trn_tourCount :: Text
- trn_tourQuestions :: Text
- trn_tourQuestPerTour :: Maybe Text
- trn_questionsTotal :: Text
- trn_typeName :: TournamentType
- trn_mainPaymentValue :: Text
- trn_mainPaymentCurrency :: Text
- trn_discountedPaymentValue :: Text
- trn_discountedPaymentCurrency :: Text
- trn_discountedPaymentReason :: Text
- trn_dateRequestsAllowedTo :: Text
- trn_comment :: Text
- trn_siteUrl :: Text
- trn_archive :: Text
- trn_dateArchivedAt :: Text
- trn_db_tags :: [Text]
- tournamentToShort :: Tournament -> TournamentShort
- data RecapTeam = RecapTeam {
- rt_idteam :: TeamId
- rt_recaps :: [RecapPlayer]
- data RecapPlayer = RecapPlayer {}
- data TournamentResult = TournamentResult {
- tr_idteam :: TeamId
- tr_current_name :: Text
- tr_base_name :: Text
- tr_position :: Text
- tr_questions_total :: Text
- tr_mask :: Text
- tr_tech_rating :: Text
- tr_tech_rating_rb :: Text
- tr_tech_rating_rt :: Text
- tr_tech_rating_r :: Text
- tr_tech_rating_rg :: Text
- tr_predicted_position :: Text
- tr_bonus_a :: Text
- tr_bonus_b :: Text
- tr_diff_bonus :: Text
- tr_included_in_rating :: Text
- data TourResult = TourResult {}
- data Controversial = Controversial {}
- data Appeal = Appeal {}
- data RatingFormula
- data TournamentType
- data ClaimStatus
- data AppealType
- data PlayerId
- data TeamId
- data TournamentId
- data Request = Request {}
- data TeamName = TeamName {
- tnTeamId :: Int
- tnCurrentName :: Text
- tnCurrentTown :: Text
- tnBaseName :: Text
- tnBaseTown :: Text
- data Town = Town {
- townId :: TownId
- townName :: Text
- townOtherName :: Maybe Text
- townRegion :: Maybe Text
- townCountry :: Maybe Text
- data SynchTown = SynchTown {}
Работа с API
В этом разделе описаны типы, используемые при запросах к предоставляемому сайтом рейтинга REST API
type RatingClient = ClientM Source #
Синоним типа для реэкспорта. Монада, в которой возможно выполнять запросы к REST API сайта рейтинга
Общие типы
Список элементов с общим количеством для разбиения на страницы
Instances
Eq a => Eq (Items a) Source # | |
Read a => Read (Items a) Source # | |
Show a => Show (Items a) Source # | |
Generic (Items a) Source # | |
FromJSON a => FromJSON (Items a) Source # | |
type Rep (Items a) Source # | |
Defined in RatingChgkInfo.Types type Rep (Items a) = D1 (MetaData "Items" "RatingChgkInfo.Types" "rating-chgk-info-0.3.6.5-HdUzoVojpuLEMLlZECApFf" False) (C1 (MetaCons "Items" PrefixI True) (S1 (MetaSel (Just "total") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Just "items") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 [a]))) |
Отображение сезонов на элементы
API NOTE: пустое отображение должно обозначаться {}
вместо []
SeasonMap | |
|
type RatingApi = ("players" :> (QueryParam "page" Int :> Get '[JSON] (Items Player))) :<|> (("players" :> (Capture "idplayer" PlayerId :> Get '[JSON] [Player])) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> Get '[JSON] [PlayerTeam]))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> ("last" :> Get '[JSON] [PlayerTeam])))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("teams" :> (Capture "idseason" Int :> Get '[JSON] [PlayerTeam])))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> Get '[JSON] (SeasonMap PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> ("last" :> Get '[JSON] PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("tournaments" :> (Capture "idseason" Int :> Get '[JSON] PlayerSeason)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> Get '[JSON] [PlayerRating]))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> ("last" :> Get '[JSON] PlayerRating)))) :<|> (("players" :> (Capture "idplayer" PlayerId :> ("rating" :> (Capture "idrelease" Int :> Get '[JSON] PlayerRating)))) :<|> (("teams" :> (QueryParam "page" Int :> Get '[JSON] (Items Team))) :<|> (("teams" :> (Capture "idteam" TeamId :> Get '[JSON] [Team])) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> Get '[JSON] (SeasonMap TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> ("last" :> Get '[JSON] TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("recaps" :> (Capture "idseason" Int :> Get '[JSON] TeamBaseRecap)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> Get '[JSON] (SeasonMap TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> ("last" :> Get '[JSON] TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("tournaments" :> (Capture "idseason" Int :> Get '[JSON] TeamTournament)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> Get '[JSON] [TeamRating]))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> ("a" :> Get '[JSON] TeamRating)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> ("b" :> Get '[JSON] TeamRating)))) :<|> (("teams" :> (Capture "idteam" TeamId :> ("rating" :> (Capture "idrelease" Int :> Get '[JSON] TeamRating)))) :<|> (("tournaments" :> (QueryParam "page" Int :> Get '[JSON] (Items TournamentShort))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> Get '[JSON] [Tournament])) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> Get '[JSON] [TournamentResult]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("town" :> (Capture "idtown" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("region" :> (Capture "idregion" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("list" :> ("country" :> (Capture "idcountry" Int :> Get '[JSON] [TournamentResult]))))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("recaps" :> Get '[JSON] [RecapTeam]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("recaps" :> (Capture "idteam" TeamId :> Get '[JSON] [RecapPlayer])))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("results" :> (Capture "idteam" TeamId :> Get '[JSON] [TourResult])))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("controversials" :> Get '[JSON] [Controversial]))) :<|> (("tournaments" :> (Capture "idtournament" TournamentId :> ("appeals" :> Get '[JSON] [Appeal]))) :<|> (("teams" :> ("search" :> (QueryParam "name" Text :> (QueryParam "town" Text :> (QueryParam "region_name" Text :> (QueryParam "country_name" Text :> (QueryFlag "active_this_season" :> (QueryParam "page" Int :> Get '[JSON] (Items Team))))))))) :<|> (("players" :> ("search" :> (QueryParam "surname" Text :> (QueryParam "name" Text :> (QueryParam "patronymic" Text :> (QueryParam "page" Int :> Get '[JSON] (Items Player))))))) :<|> ("tournaments" :> ("search" :> (QueryParam "type_name" TournamentType :> (QueryParam "archive" Int :> (QueryParam "page" Int :> Get '[JSON] (Items TournamentShort))))))))))))))))))))))))))))))))))))))))) Source #
Тип, описывающий API сайта рейтинга. Функции, которые позволяют делать запросы к API, находятся в модуле RatingChgkInfo.Api
Некоторые замечания по общему дизайну API:
- API NOTE: в запросах
/players/:id
,/tournaments/:id
и некоторых других должен возвращаться единственный результат вместо списка из одного результата - API NOTE: в запросе
/players/:id/teams
и других запросах, возвращающие элементы по сезонам, следует возвращать список вместо отображения номера сезона на элемент (идентификатор сезона дублируется в самом элементе) - API NOTE: запросы, возвращающие элементы по сезонам, и запрос
/tournaments/:tourn/results/:team
устроены по-разному - API NOTE: запрос
/teams/:id/rating/:formula
, по-видимому, несколько сломан: для команды 1 он возвращает пустую строку (по состоянию на 2019-01-11) - API NOTE: запрос
/players/:id/rating/last
, по-видимому, нсколько сломан: для игрока 54345 он возвращает пустую строку (по состоянию на 2019-01-11) - API NOTE: запросы
/tournament/:id/town/:town
должны использовать QueryParam вместо параметров путей
Игрок
Игрок
Player | |
|
Instances
Eq Player Source # | |
Read Player Source # | |
Show Player Source # | |
Generic Player Source # | |
ToJSON Player Source # | |
Defined in RatingChgkInfo.Types | |
FromJSON Player Source # | |
type Rep Player Source # | |
Defined in RatingChgkInfo.Types type Rep Player = D1 (MetaData "Player" "RatingChgkInfo.Types" "rating-chgk-info-0.3.6.5-HdUzoVojpuLEMLlZECApFf" False) (C1 (MetaCons "Player" PrefixI True) ((S1 (MetaSel (Just "idplayer") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 PlayerId) :*: S1 (MetaSel (Just "surname") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text)) :*: (S1 (MetaSel (Just "name") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text) :*: (S1 (MetaSel (Just "patronymic") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text) :*: S1 (MetaSel (Just "db_chgk_info_tag") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 (Maybe Text)))))) |
data PlayerTeam Source #
Игрок в базовом составе команды
PlayerTeam | |
|
Instances
data PlayerSeason Source #
Турниры, сыгранные игроком в сезоне
PlayerSeason | |
|
Instances
data PlayerTournament Source #
Турнир, сыгранный игроком
PlayerTournament | |
|
Instances
data PlayerRating Source #
Рейтинг игрока
PlayerRating | |
|
Instances
Команда
Команда
Team | |
|
Instances
data TeamBaseRecap Source #
Базовый состав команды
TeamBaseRecap | |
|
Instances
data TeamTournament Source #
Турниры, сыгранные командой в сезоне
TeamTournament | |
|
Instances
data TeamRating Source #
Рейтинг команды
TeamRating | |
|
Instances
Турнир
Общая информация о турнире
data TournamentShort Source #
Короткая информация о турнире (в списке турниров)
TournamentShort | |
|
Instances
data Tournament Source #
Полная информация о турнире (по отдельному запросу)
Тип Tournament
можно было бы объединить с TournamentShort
, однако, в этом
случае бóльшая часть полей имела бы тип Maybe
x, что подразумевало бы
другой смысл, с менее строгой проверкой типов (некоторые поля могут быть
установлены, а некоторые нет). Поэтому было решено разделить эти два типа.
Сконвертировать Tournament
в TournamentShort
можно при помощи функции
tournamentToShort
.
В отличие от Tournament
в типах Player
и Team
есть единственное поле,
которое устанавливается в запросе более полной информации, поэтому эти типы
не разделены на два.
Tournament | |
|
Instances
tournamentToShort :: Tournament -> TournamentShort Source #
Преобразует Tournament
в TournamentShort
, убирая лишние поля
Составы
Состав команды на турнире
RecapTeam | |
|
Instances
Eq RecapTeam Source # | |
Read RecapTeam Source # | |
Show RecapTeam Source # | |
Generic RecapTeam Source # | |
ToJSON RecapTeam Source # | |
Defined in RatingChgkInfo.Types | |
FromJSON RecapTeam Source # | |
type Rep RecapTeam Source # | |
Defined in RatingChgkInfo.Types type Rep RecapTeam = D1 (MetaData "RecapTeam" "RatingChgkInfo.Types" "rating-chgk-info-0.3.6.5-HdUzoVojpuLEMLlZECApFf" False) (C1 (MetaCons "RecapTeam" PrefixI True) (S1 (MetaSel (Just "rt_idteam") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 TeamId) :*: S1 (MetaSel (Just "rt_recaps") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 [RecapPlayer]))) |
data RecapPlayer Source #
Информация об игроке в составе команды на турнире
API NOTE. Так как игрок не может быть одновременно в базовом составе и легионером, нужно заменить эти два поля одним, либо описать, когда игрок может не быть ни базовым, ни легионером
RecapPlayer | |
|
Instances
Результаты
data TournamentResult Source #
Результаты турнира для команды
TournamentResult | |
|
Instances
data TourResult Source #
Результаты команды по турам
Instances
Спорные и апелляции
data Controversial Source #
Спорный
Controversial | |
|
Instances
Апелляция
Appeal | |
|
Instances
Типы-перечисления
data RatingFormula Source #
Формула рейтинга
Instances
data TournamentType Source #
Тип турнира
API NOTE: типа ""
(пустая строка) быть не должно. На данный момент (2019-01-13) таких турниров три: 2864, 2937, 2995. Типа Неизвестный
тоже быть не должно. Такой один: 2186
Synchronous | Синхрон |
StrictlySynchronous | Строго синхронный |
Asynchronous | Асинхрон |
Casual | Обычный |
Regional | Региональный |
Marathon | Марафон |
TotalScore | Общий зачёт |
TypeUnknown | Неизвестный |
TypeEmpty | (пустая строка) |
Instances
data ClaimStatus Source #
Статус спорного или апелляции
ClaimNew | Новый (N) |
ClaimAccepted | Принят (A) |
ClaimRejected | Отклонён (D) |
Instances
data AppealType Source #
Вид апелляции
AppealApprove | Апелляция на зачёт ответа (A) |
AppealRemove | Апелляция на снятие вопроса (R) |
AppealNarrator | Апелляция на снятие из-за ошибки ведущего (N) |
Instances
Типы для идентификаторов
Экспортируются без функций, позволяющих вытащить данные из типа, поскольку предполагается, что идентификаторы получаются только из запросов к серверу. Это должно помочь избежать ошибок, когда идентификатор одного типа (например, id игрока) ошибочно передаётся туда, где ожидается идентификатор другого типа (например, id турнира). Если вам совершенно точно без этого не обойтись, используйте модуль RatingChgkInfo.Types.Unsafe.
Идентификатор игрока. В API на самом деле возвращается строка, но во всех функциях работы с игроками используется этот тип. Чтобы получить значение этого типа следует получить данные из API
Instances
Eq PlayerId Source # | |
Read PlayerId Source # | |
Show PlayerId Source # | |
Generic PlayerId Source # | |
ToJSON PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe | |
FromJSON PlayerId Source # | |
ToHttpApiData PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe toUrlPiece :: PlayerId -> Text # toEncodedUrlPiece :: PlayerId -> Builder # toHeader :: PlayerId -> ByteString # toQueryParam :: PlayerId -> Text # | |
FromHttpApiData PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe parseUrlPiece :: Text -> Either Text PlayerId # parseHeader :: ByteString -> Either Text PlayerId # | |
ToSchema PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe | |
ToParamSchema PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe toParamSchema :: Proxy PlayerId -> ParamSchema t # | |
type Rep PlayerId Source # | |
Defined in RatingChgkInfo.Types.Unsafe |
Идентификатор команды. В API на самом деле возвращается строка, но во всех функциях работы с командами используется этот тип. Чтобы получить значение этого типа следует получить данные из API
Instances
Eq TeamId Source # | |
Read TeamId Source # | |
Show TeamId Source # | |
Generic TeamId Source # | |
ToJSON TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe | |
FromJSON TeamId Source # | |
ToHttpApiData TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe toUrlPiece :: TeamId -> Text # toEncodedUrlPiece :: TeamId -> Builder # toHeader :: TeamId -> ByteString # toQueryParam :: TeamId -> Text # | |
FromHttpApiData TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe parseUrlPiece :: Text -> Either Text TeamId # parseHeader :: ByteString -> Either Text TeamId # | |
ToSchema TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe | |
ToParamSchema TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe toParamSchema :: Proxy TeamId -> ParamSchema t # | |
type Rep TeamId Source # | |
Defined in RatingChgkInfo.Types.Unsafe |
data TournamentId Source #
Идентификатор турнира. В API на самом деле возвращается строка, но во всех функциях работы с турнирами используется этот тип. Чтобы получить значение этого типа следует получить данные из API
Instances
Работа без API
В этом разделе - типы, которые используются при запросах к CSV-таблицам на сайте рейтинга для функциональности, которая (надеюсь, пока) не предоставляется через REST API
Функции для работы с этими типами находятся в модуле RatingChgkInfo.NoApi
- * Заявки на турниры
Заявка на проведение
Request | |
|
Instances
Название команды на турнире
TeamName | |
|
Instances
Eq TeamName Source # | |
Read TeamName Source # | |
Show TeamName Source # | |
Generic TeamName Source # | |
ToJSON TeamName Source # | |
Defined in RatingChgkInfo.Types | |
ToSchema TeamName Source # | |
Defined in RatingChgkInfo.Types | |
type Rep TeamName Source # | |
Defined in RatingChgkInfo.Types type Rep TeamName = D1 (MetaData "TeamName" "RatingChgkInfo.Types" "rating-chgk-info-0.3.6.5-HdUzoVojpuLEMLlZECApFf" False) (C1 (MetaCons "TeamName" PrefixI True) ((S1 (MetaSel (Just "tnTeamId") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Int) :*: S1 (MetaSel (Just "tnCurrentName") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text)) :*: (S1 (MetaSel (Just "tnCurrentTown") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text) :*: (S1 (MetaSel (Just "tnBaseName") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text) :*: S1 (MetaSel (Just "tnBaseTown") NoSourceUnpackedness NoSourceStrictness DecidedStrict) (Rec0 Text))))) |
География
Город
Town | |
|
Синхроны в городе
Синхрон, проводимый в городе
SynchTown | |
|