aboutsummaryrefslogtreecommitdiffhomepage
path: root/typespec/api-server/routes.tsp
blob: 3409cea0475fdc317497eb5a1b139f541a612fb8 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using TypeSpec.Http;
using TypeSpec.OpenAPI;

namespace AlbatrossApi;

// ---------- Auth ----------

@route("/login")
@post
@operationId("postLogin")
op postLogin(@body body: {
  username: string;
  password: string;
}): {
  @body body: {
    user: User;
  };
} | UnauthorizedError;

@route("/logout")
@post
@operationId("postLogout")
op postLogout(): {
  @statusCode statusCode: 200;
} | UnauthorizedError;

@route("/me")
@get
@operationId("getMe")
op getMe(): {
  @body body: {
    user: User;
  };
} | UnauthorizedError;

// ---------- Games ----------

@route("/games")
@get
@operationId("getGames")
op getGames(): {
  @body body: {
    games: Game[];
  };
} | UnauthorizedError | ForbiddenError;

@route("/games/{game_id}")
@get
@operationId("getGame")
op getGame(@path game_id: integer): {
  @body body: {
    game: Game;
  };
} | UnauthorizedError | ForbiddenError | NotFoundError;

// ---------- Play ----------

@route("/games/{game_id}/play/latest_state")
@get
@operationId("getGamePlayLatestState")
op getGamePlayLatestState(@path game_id: integer): {
  @body body: {
    state: LatestGameState;
  };
} | UnauthorizedError | ForbiddenError | NotFoundError;

@route("/games/{game_id}/play/code")
@post
@operationId("postGamePlayCode")
op postGamePlayCode(
  @path game_id: integer,
  @body body: {
    code: string;
  },
): {
  @statusCode statusCode: 200;
} | UnauthorizedError | ForbiddenError | NotFoundError;

@route("/games/{game_id}/play/submit")
@post
@operationId("postGamePlaySubmit")
op postGamePlaySubmit(
  @path game_id: integer,
  @body body: {
    code: string;
  },
): {
  @statusCode statusCode: 200;
} | UnauthorizedError | ForbiddenError | NotFoundError;

// ---------- Watch ----------

@route("/games/{game_id}/watch/ranking")
@get
@operationId("getGameWatchRanking")
op getGameWatchRanking(@path game_id: integer): {
  @body body: {
    ranking: RankingEntry[];
  };
} | UnauthorizedError | ForbiddenError | NotFoundError;

@route("/games/{game_id}/watch/latest_states")
@get
@operationId("getGameWatchLatestStates")
op getGameWatchLatestStates(@path game_id: integer): {
  @body body: {
    states: Record<LatestGameState>;
  };
} | UnauthorizedError | ForbiddenError | NotFoundError;

// ---------- Tournament ----------

@route("/tournament")
@get
@operationId("getTournament")
op getTournament(
  @query game1: integer,
  @query game2: integer,
  @query game3: integer,
  @query game4: integer,
  @query game5: integer,
): {
  @body body: {
    tournament: Tournament;
  };
} | UnauthorizedError | ForbiddenError | NotFoundError;