# E-Sport Tournament API Specifications
## Endpoints
### Get Tournaments
Returns list of all tournaments.
#### Get Tournaments Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetTournaments
```
#### Get Tournaments Response
List of [Tournament](#Tournament)
___
### Get Active Tournaments
Returns list of all active tournaments.
#### Get Active Tournaments Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetActiveTournaments
```
#### Get Active Tournaments Response
List of [Tournament](#Tournament)
___
### Get Joinable Teams
Returns list of all joinable teams of selected tournament. Teams which played any teams will not be listed here.
#### Get Joinable Teams Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetJoinableTeams
```
##### Get Joinable Teams Request Data
|Name|Type|
|---|---|
|TournamentId|int|
#### Get Joinable Teams Response
List of [TournamentTeamInfoView](#TournamentTeamInfoView)
___
### Get Tournament Statistics
Used for listing all team statistics of the tournament. (ex: Current ranking, top 10 etc.)
#### Get Tournament Statistics Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetTournamentStatistics
```
##### Get Tournament Statistics Request Data
|Name|Type|
|---|---|
|TournamentId|int|
### Get Tournament Statistics Response
List of [TournamentTeamMatchStatistic](#TournamentTeamMatchStatistic)
___
### Get Tournament Statistics By TeamId
Used for listing statistics of the team. Can be used for current team status or lookup for join.
#### Get Tournament Statistics By TeamId Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetTournamentStatisticsByTeamId
```
##### Get Tournament Statistics By TeamId Request Data
|Name|Type|
|---|---|
|TournamentId|int|
|TeamId|int|
#### Get Tournament Statistics By TeamId Response
[TournamentTeamMatchStatistic](#TournamentTeamMatchStatistic)
___
### Get Tournament Player Statistics
Used for listing all player statistics of the tournament. (ex: Current ranking, top 10 etc.)
#### Get Tournament Player Statistics Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetTournamentPlayerStatistics
```
##### Get Tournament Player Statistics Request Data
|Name|Type|
|---|---|
|TournamentId|int|
### Get Tournament Player Statistics Response
[TournamentTeamPlayerStatisticsView](#TournamentTeamPlayerStatisticsView)
___
### Get Tournament Player Statistics By TeamId
Used for listing player statistics of the team. Can be used for current team dashboard.
#### Get Tournament Player Statistics By TeamId Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/GetTournamentPlayerStatisticsByTeamId
```
##### Get Tournament Player Statistics By TeamId Request Data
|Name|Type|
|---|---|
|TournamentId|int|
|TeamId|int|
#### Get Tournament Player Statistics By TeamId Response
[TournamentTeamPlayerStatisticsView](#TournamentTeamPlayerStatisticsView)
___
### Create Team
Called for creting team for the tournament. Requires ticket of the tournament.
#### Create Team Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/Create
```
##### Create Team Request Data
|Name|Type|
|---|---|
|TournamentId|int|
|TeamName|string|
|RequestPermissionType|[ETournamentTeamRequestPermissionType](#ETournamentTeamRequestPermissionType) : int
#### Create Team Response
##### Create Team BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
|23|AccessDenied|Player is not allowed to play (ex: league players are forbidden)|
|16|NotFound|Tournament does not exists|
|17|MaxEndTime|Tournaments has finished|
|59|SmsOptIn|Phone number of the player is not verified|
|26|InsufficientLevel|Level of the player does not match with tournament requirements|
|84|InsufficientElo|Elo level of the player does not match with tournament requirements|
| 8|NoSpaceLeft|Tournament has reached maximum team count|
|24|UserExists|Player is already in the another team at that tournament|
| 3|ModelStateError|Team name forbidden due to censored word|
|67|PaymentRequirementItem|Player does not have any ticket for the tournament|
##### Create Team Ok Response
See [TournamentTeam](#TournamentTeam)
___
### Disband Team
Disbands the team of the player. Gives back ticket to the player. Can not be called after any match is played.
#### Disband Team Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/Disband
```
#### Disband Team Request Data
|Name|Type|
|---|---|
|TeamId|int|
#### Disband Team Response
##### Disband Team BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
| 3|ModelStateError|Player does not exist in the team|
|23|AccessDenied|Player is not captain of the team|
|16|NotFound|Team does not found|
|69|AllReadyCompetitiveMatchPlayed|Team has already played a game. Can not be disbanded|
##### Disband Team Ok Response
Empty response
___
### Invite To Team
Only team captain can call thin endpoints. Used for sending invites to players.
#### Invite To Team Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/Invite
```
##### Invite To Team Request Data
|Name|Type|
|---|---|
|TeamId|int|
|RecipientMemberId|int|
#### Invite To Team Response
##### Invite To Team BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
| 3|ModelStateError|Player does not exist in the team|
|23|AccessDenied|Player is not captain of the team|
##### Invite To Team Ok Response
Empty response
___
### Join Team
Used for requesting to join tournament team. Player joins the team if possible or creates join request for team captain.
#### Join Team Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/Join
```
##### Join Team Request Data
|Name|Type|
|---|---|
|TeamId|int|
#### Join Team Response
##### Join Team BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
| 3|ModelStateError|Team does not exist|
|24|UserExists|Player exists in another team for tournament|
| 8|NoSpaceLeft|Team is full|
|16|NotFound|(Tournament does not exist) OR (Requested team has private RequestPermissionType and player is not invited)|
|59|SmsOptIn|Phone number of the player is not verified|
|26|InsufficientLevel|Level of the player does not match with tournament requirements|
|84|InsufficientElo|Elo level of the player does not match with tournament requirements|
##### Join Team Ok Response Data
- Empty Response: On join request sent to team captain.
- [TournamentTeamPlayer](#TournamentTeamPlayer): On joining to the team.
___
### Reject Invite
Can be called when player receive intive request from team captain.
#### Reject Invite Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/RejectInvite
```
##### Reject Invite Request Data
|Name|Type|
|---|---|
|TeamId|int|
#### Reject Invite Response
##### Reject Invite BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
|16|NotFound|Invite does not exists|
##### Reject Invite Ok Response Data
Empty response
___
### Kick Player
#### Kick Player Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/KickPlayer
```
##### Kick Player Request Data
|Name|Type|Description|
|---|---|---|
|MemberId|int|Member id of the player which will be kicked|
|TeamId|int|
#### Kick Player Response
##### Kick Player BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
| 3|ModelStateError|Requested member id is same as current player|
|16|NotFound|Team or player to be kicked not found|
|23|AccessDenied|Requester is not the team captain|
##### Kick Player Ok Response Data
Empty response
___
### Leave Team
#### Leave Team Request
```plain
POST https://*.zulaoyun.com/zula/Tournament/LeaveTeam
```
##### Leave Team Request Data
|Name|Type|
|---|---|
|TeamId|int|
#### Leave Team Response
##### Leave Team BadRequest Status Codes
|Value|Name|Description|
|---|---|---|
|16|NotFound|Team or player to which will be left not found|
##### Leave Team Ok Response Data
Empty response
___
## Models
### Enums
#### ETournamentTeamRequestPermissionType
|Value|Name|Desciption|
|---|---|---|
|1|Private|Only team leader can invite players|
|2|ViaApplication|Other player can request to join|
|3|Public|Other players can directly join to the team|
#### GameMode
|Value|Name|
|---|---|
|-1|None|
|0|Tdm|
|1|Wanted|
|2|Sabotage|
|3|Coop|
|4|Vampir|
|5|DeadMatch|
|6|CaptureTheFlag|
|7|SnowBall|
|8|Escort|
|9|Elimination|
|10|VIP|
|11|BattleRoyale|
|12|Slap|
### Request Models
#### CreateTournamentTeamRequest
|Name|Type|
|---|---|---|
|TournamentId|int|
|TeamName|string|
|RequestPermissionType|[ETournamentTeamRequestPermissionType](#ETournamentTeamRequestPermissionType) : int|
___
### Response/Entity Models
#### Tournament
|Name|Type|Desciption|
|---|---|---|
|Id|int|
|Name|string|
|Description|string|Description of the tournament|
|CreateDate|DateTime|
|StartDate|DateTime|Tournament playable time start|
|EndDate|DateTime|Tournament playable time end|
|MatchCount|int|Total match count which will be player per team|
|MinimumTeamCount|int|
|MaximumTeamCount|int|
|MinimumEloLevel|int|
|MaximumEloLevel|int|
|MinimumLevel|int|
|MaximumLevel|int|
|IsActive|int|
|PhoneConfirmationNeeded|bool|
|StartDateSeconds|int|Tournament playable time start (Negative if not started)|
|EndDateSeconds|int|Tournament playable time end (Negative if ended)|
#### TournamentTeam
|Name|Type|
|---|---|
|Id|int|
|Name|string|
|TournamentId|int|
|PlayedMatchCount|int|
|CreateDate|DateTime|
|CreateDateSeconds|int|
|IsActive|bool|
|RequestPermissionType|[ETournamentTeamRequestPermissionType](#ETournamentTeamRequestPermissionType) : int|
#### TournamentTeamPlayer
|Name|Type|
|---|---|
|Id|int|
|TournamentId|int|
|TournamentTeamId|int|
|MemberId|int|
|CreateDate|DateTime|
|IsCaptain|bool|
#### TournamentTeamMatchStatistic
|Name|Type|
|---|---|
|Id|int|
|TournamentId|int|
|MatchId|int|
|WinRoundCount|int(nullable)|
|LoseRoundCount|int(nullable)|
|TotalKillCount|int|
|TotalDeathCount|int|
|CreateDate|DateTime|
|GameMode|[GameMode](#GameMode) : int|
|Standing|int(nullable)|
#### TournamentTeamPlayerMatchStatistic
|Name|Type|
|---|---|
|Id|int|
|TournamentId|int|
|MatchId|int|
|TeamId|int|
|WinRoundCount|int|
|LoseRoundCount|int|
|TotalKillCount|int|
|TotalDeathCount|int|
|TotalAssistCount|int|
|CreateDate|Datetime|
|Standing|int(nullable)|
#### TournamentTeamPlayerInfoView
|Name|Type|
|---|---|
|MemberId|int|
|Nickname|string|
|IsCaptain|bool|
#### TournamentTeamInfoView
|Name|Type|Description|
|---|---|---|
|Id|int|Id of the team|
|Name|string|
|CaptainRank|int|
|CurrentPlayerCount|int|
|PlayerCapacity|int|
|RequestPermissionType|[ETournamentTeamRequestPermissionType](#ETournamentTeamRequestPermissionType) : int|
|Players|List of [TournamentTeamPlayerInfoView](#TournamentTeamPlayerInfoView)|
#### TournamentTeamPlayerStatisticDTO
|Name|Type|Description|
|---|---|---|
|PlayerId|int|
|TeamId|int|
|Nickname|int|
|TeamName|string|
|Kill|int|
|Death|int|
|Assist|int|
|KDA|double|(Kill + Assist) / Death|
#### TournamentTeamPlayerStatisticView
|Name|Type|Description|
|---|---|---|
|TournamentId|int|
|LastUpdate|int|Seconds passed after last update|
|Statistic|[TournamentTeamPlayerStatisticDTO](#TournamentTeamPlayerStatisticDTO)|
#### TournamentTeamPlayerStatisticsView
|Name|Type|Description|
|---|---|---|
|TournamentId|int|
|LastUpdate|int|Seconds passed after last update|
|Statistics|List of [TournamentTeamPlayerStatisticDTO](#TournamentTeamPlayerStatisticDTO)|