aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/api
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-03-04 22:55:01 +0900
committernsfisis <nsfisis@gmail.com>2025-03-08 10:12:44 +0900
commit1e6df136d8202c8adf65948527f4c3e7583b338c (patch)
tree7c82476f6bbbc71d72ab7e71e39559eca197fd95 /backend/api
parent54316868c3bec1ff9b04643dfe6c13cf56bf3246 (diff)
downloadiosdc-japan-2025-albatross-1e6df136d8202c8adf65948527f4c3e7583b338c.tar.gz
iosdc-japan-2025-albatross-1e6df136d8202c8adf65948527f4c3e7583b338c.tar.zst
iosdc-japan-2025-albatross-1e6df136d8202c8adf65948527f4c3e7583b338c.zip
websocket to polling
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/generated.go1266
-rw-r--r--backend/api/handler.go233
-rw-r--r--backend/api/handler_wrapper.go60
3 files changed, 858 insertions, 701 deletions
diff --git a/backend/api/generated.go b/backend/api/generated.go
index af716df..001b264 100644
--- a/backend/api/generated.go
+++ b/backend/api/generated.go
@@ -1,6 +1,6 @@
// Package api provides primitives to interact with the openapi HTTP API.
//
-// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.3.0 DO NOT EDIT.
+// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.4.1 DO NOT EDIT.
package api
import (
@@ -22,59 +22,21 @@ import (
strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo"
)
-// Defines values for GameGameType.
-const (
- Multiplayer GameGameType = "multiplayer"
- N1V1 GameGameType = "1v1"
-)
-
-// Defines values for GameState.
-const (
- Closed GameState = "closed"
- Finished GameState = "finished"
- Gaming GameState = "gaming"
- Starting GameState = "starting"
- Waiting GameState = "waiting"
-)
-
-// Defines values for GamePlayerMessageS2CExecResultPayloadStatus.
-const (
- GamePlayerMessageS2CExecResultPayloadStatusCompileError GamePlayerMessageS2CExecResultPayloadStatus = "compile_error"
- GamePlayerMessageS2CExecResultPayloadStatusInternalError GamePlayerMessageS2CExecResultPayloadStatus = "internal_error"
- GamePlayerMessageS2CExecResultPayloadStatusRuntimeError GamePlayerMessageS2CExecResultPayloadStatus = "runtime_error"
- GamePlayerMessageS2CExecResultPayloadStatusSuccess GamePlayerMessageS2CExecResultPayloadStatus = "success"
- GamePlayerMessageS2CExecResultPayloadStatusTimeout GamePlayerMessageS2CExecResultPayloadStatus = "timeout"
- GamePlayerMessageS2CExecResultPayloadStatusWrongAnswer GamePlayerMessageS2CExecResultPayloadStatus = "wrong_answer"
-)
-
-// Defines values for GamePlayerMessageS2CSubmitResultPayloadStatus.
-const (
- GamePlayerMessageS2CSubmitResultPayloadStatusCompileError GamePlayerMessageS2CSubmitResultPayloadStatus = "compile_error"
- GamePlayerMessageS2CSubmitResultPayloadStatusInternalError GamePlayerMessageS2CSubmitResultPayloadStatus = "internal_error"
- GamePlayerMessageS2CSubmitResultPayloadStatusRuntimeError GamePlayerMessageS2CSubmitResultPayloadStatus = "runtime_error"
- GamePlayerMessageS2CSubmitResultPayloadStatusSuccess GamePlayerMessageS2CSubmitResultPayloadStatus = "success"
- GamePlayerMessageS2CSubmitResultPayloadStatusTimeout GamePlayerMessageS2CSubmitResultPayloadStatus = "timeout"
- GamePlayerMessageS2CSubmitResultPayloadStatusWrongAnswer GamePlayerMessageS2CSubmitResultPayloadStatus = "wrong_answer"
-)
-
-// Defines values for GameWatcherMessageS2CExecResultPayloadStatus.
+// Defines values for ExecutionStatus.
const (
- GameWatcherMessageS2CExecResultPayloadStatusCompileError GameWatcherMessageS2CExecResultPayloadStatus = "compile_error"
- GameWatcherMessageS2CExecResultPayloadStatusInternalError GameWatcherMessageS2CExecResultPayloadStatus = "internal_error"
- GameWatcherMessageS2CExecResultPayloadStatusRuntimeError GameWatcherMessageS2CExecResultPayloadStatus = "runtime_error"
- GameWatcherMessageS2CExecResultPayloadStatusSuccess GameWatcherMessageS2CExecResultPayloadStatus = "success"
- GameWatcherMessageS2CExecResultPayloadStatusTimeout GameWatcherMessageS2CExecResultPayloadStatus = "timeout"
- GameWatcherMessageS2CExecResultPayloadStatusWrongAnswer GameWatcherMessageS2CExecResultPayloadStatus = "wrong_answer"
+ InternalError ExecutionStatus = "internal_error"
+ None ExecutionStatus = "none"
+ Running ExecutionStatus = "running"
+ RuntimeError ExecutionStatus = "runtime_error"
+ Success ExecutionStatus = "success"
+ Timeout ExecutionStatus = "timeout"
+ WrongAnswer ExecutionStatus = "wrong_answer"
)
-// Defines values for GameWatcherMessageS2CSubmitResultPayloadStatus.
+// Defines values for GameGameType.
const (
- GameWatcherMessageS2CSubmitResultPayloadStatusCompileError GameWatcherMessageS2CSubmitResultPayloadStatus = "compile_error"
- GameWatcherMessageS2CSubmitResultPayloadStatusInternalError GameWatcherMessageS2CSubmitResultPayloadStatus = "internal_error"
- GameWatcherMessageS2CSubmitResultPayloadStatusRuntimeError GameWatcherMessageS2CSubmitResultPayloadStatus = "runtime_error"
- GameWatcherMessageS2CSubmitResultPayloadStatusSuccess GameWatcherMessageS2CSubmitResultPayloadStatus = "success"
- GameWatcherMessageS2CSubmitResultPayloadStatusTimeout GameWatcherMessageS2CSubmitResultPayloadStatus = "timeout"
- GameWatcherMessageS2CSubmitResultPayloadStatusWrongAnswer GameWatcherMessageS2CSubmitResultPayloadStatus = "wrong_answer"
+ Multiplayer GameGameType = "multiplayer"
+ N1V1 GameGameType = "1v1"
)
// Error defines model for Error.
@@ -82,196 +44,45 @@ type Error struct {
Message string `json:"message"`
}
-// ExecStep defines model for ExecStep.
-type ExecStep struct {
- Label string `json:"label"`
- TestcaseID nullable.Nullable[int] `json:"testcase_id"`
-}
+// ExecutionStatus defines model for ExecutionStatus.
+type ExecutionStatus string
// Game defines model for Game.
type Game struct {
DisplayName string `json:"display_name"`
DurationSeconds int `json:"duration_seconds"`
- ExecSteps []ExecStep `json:"exec_steps"`
GameID int `json:"game_id"`
GameType GameGameType `json:"game_type"`
- Players []User `json:"players"`
+ IsPublic bool `json:"is_public"`
+ MainPlayers []User `json:"main_players"`
Problem Problem `json:"problem"`
StartedAt *int64 `json:"started_at,omitempty"`
- State GameState `json:"state"`
}
// GameGameType defines model for Game.GameType.
type GameGameType string
-// GameState defines model for Game.State.
-type GameState string
-
-// GamePlayerMessage defines model for GamePlayerMessage.
-type GamePlayerMessage struct {
- union json.RawMessage
-}
-
-// GamePlayerMessageC2S defines model for GamePlayerMessageC2S.
-type GamePlayerMessageC2S struct {
- union json.RawMessage
-}
-
-// GamePlayerMessageC2SCode defines model for GamePlayerMessageC2SCode.
-type GamePlayerMessageC2SCode struct {
- Data GamePlayerMessageC2SCodePayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GamePlayerMessageC2SCodePayload defines model for GamePlayerMessageC2SCodePayload.
-type GamePlayerMessageC2SCodePayload struct {
- Code string `json:"code"`
-}
-
-// GamePlayerMessageC2SSubmit defines model for GamePlayerMessageC2SSubmit.
-type GamePlayerMessageC2SSubmit struct {
- Data GamePlayerMessageC2SSubmitPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GamePlayerMessageC2SSubmitPayload defines model for GamePlayerMessageC2SSubmitPayload.
-type GamePlayerMessageC2SSubmitPayload struct {
- Code string `json:"code"`
-}
-
-// GamePlayerMessageS2C defines model for GamePlayerMessageS2C.
-type GamePlayerMessageS2C struct {
- union json.RawMessage
-}
-
-// GamePlayerMessageS2CExecResult defines model for GamePlayerMessageS2CExecResult.
-type GamePlayerMessageS2CExecResult struct {
- Data GamePlayerMessageS2CExecResultPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GamePlayerMessageS2CExecResultPayload defines model for GamePlayerMessageS2CExecResultPayload.
-type GamePlayerMessageS2CExecResultPayload struct {
- Status GamePlayerMessageS2CExecResultPayloadStatus `json:"status"`
- Stderr string `json:"stderr"`
- Stdout string `json:"stdout"`
- TestcaseID nullable.Nullable[int] `json:"testcase_id"`
-}
-
-// GamePlayerMessageS2CExecResultPayloadStatus defines model for GamePlayerMessageS2CExecResultPayload.Status.
-type GamePlayerMessageS2CExecResultPayloadStatus string
-
-// GamePlayerMessageS2CStart defines model for GamePlayerMessageS2CStart.
-type GamePlayerMessageS2CStart struct {
- Data GamePlayerMessageS2CStartPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GamePlayerMessageS2CStartPayload defines model for GamePlayerMessageS2CStartPayload.
-type GamePlayerMessageS2CStartPayload struct {
- StartAt int64 `json:"start_at"`
-}
-
-// GamePlayerMessageS2CSubmitResult defines model for GamePlayerMessageS2CSubmitResult.
-type GamePlayerMessageS2CSubmitResult struct {
- Data GamePlayerMessageS2CSubmitResultPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GamePlayerMessageS2CSubmitResultPayload defines model for GamePlayerMessageS2CSubmitResultPayload.
-type GamePlayerMessageS2CSubmitResultPayload struct {
- Score nullable.Nullable[int] `json:"score"`
- Status GamePlayerMessageS2CSubmitResultPayloadStatus `json:"status"`
-}
-
-// GamePlayerMessageS2CSubmitResultPayloadStatus defines model for GamePlayerMessageS2CSubmitResultPayload.Status.
-type GamePlayerMessageS2CSubmitResultPayloadStatus string
-
-// GameWatcherMessage defines model for GameWatcherMessage.
-type GameWatcherMessage struct {
- union json.RawMessage
-}
-
-// GameWatcherMessageS2C defines model for GameWatcherMessageS2C.
-type GameWatcherMessageS2C struct {
- union json.RawMessage
-}
-
-// GameWatcherMessageS2CCode defines model for GameWatcherMessageS2CCode.
-type GameWatcherMessageS2CCode struct {
- Data GameWatcherMessageS2CCodePayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GameWatcherMessageS2CCodePayload defines model for GameWatcherMessageS2CCodePayload.
-type GameWatcherMessageS2CCodePayload struct {
- Code string `json:"code"`
- PlayerID int `json:"player_id"`
-}
-
-// GameWatcherMessageS2CExecResult defines model for GameWatcherMessageS2CExecResult.
-type GameWatcherMessageS2CExecResult struct {
- Data GameWatcherMessageS2CExecResultPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GameWatcherMessageS2CExecResultPayload defines model for GameWatcherMessageS2CExecResultPayload.
-type GameWatcherMessageS2CExecResultPayload struct {
- PlayerID int `json:"player_id"`
- Status GameWatcherMessageS2CExecResultPayloadStatus `json:"status"`
- Stderr string `json:"stderr"`
- Stdout string `json:"stdout"`
- TestcaseID nullable.Nullable[int] `json:"testcase_id"`
+// LatestGameState defines model for LatestGameState.
+type LatestGameState struct {
+ Code string `json:"code"`
+ Score nullable.Nullable[int] `json:"score"`
+ Status ExecutionStatus `json:"status"`
}
-// GameWatcherMessageS2CExecResultPayloadStatus defines model for GameWatcherMessageS2CExecResultPayload.Status.
-type GameWatcherMessageS2CExecResultPayloadStatus string
-
-// GameWatcherMessageS2CStart defines model for GameWatcherMessageS2CStart.
-type GameWatcherMessageS2CStart struct {
- Data GameWatcherMessageS2CStartPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GameWatcherMessageS2CStartPayload defines model for GameWatcherMessageS2CStartPayload.
-type GameWatcherMessageS2CStartPayload struct {
- StartAt int64 `json:"start_at"`
-}
-
-// GameWatcherMessageS2CSubmit defines model for GameWatcherMessageS2CSubmit.
-type GameWatcherMessageS2CSubmit struct {
- Data GameWatcherMessageS2CSubmitPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GameWatcherMessageS2CSubmitPayload defines model for GameWatcherMessageS2CSubmitPayload.
-type GameWatcherMessageS2CSubmitPayload struct {
- PlayerID int `json:"player_id"`
-}
-
-// GameWatcherMessageS2CSubmitResult defines model for GameWatcherMessageS2CSubmitResult.
-type GameWatcherMessageS2CSubmitResult struct {
- Data GameWatcherMessageS2CSubmitResultPayload `json:"data"`
- Type string `json:"type"`
-}
-
-// GameWatcherMessageS2CSubmitResultPayload defines model for GameWatcherMessageS2CSubmitResultPayload.
-type GameWatcherMessageS2CSubmitResultPayload struct {
- PlayerID int `json:"player_id"`
- Score nullable.Nullable[int] `json:"score"`
- Status GameWatcherMessageS2CSubmitResultPayloadStatus `json:"status"`
-}
-
-// GameWatcherMessageS2CSubmitResultPayloadStatus defines model for GameWatcherMessageS2CSubmitResultPayload.Status.
-type GameWatcherMessageS2CSubmitResultPayloadStatus string
-
// Problem defines model for Problem.
type Problem struct {
Description string `json:"description"`
ProblemID int `json:"problem_id"`
+ SampleCode string `json:"sample_code"`
Title string `json:"title"`
}
+// RankingEntry defines model for RankingEntry.
+type RankingEntry struct {
+ Player User `json:"player"`
+ Score int `json:"score"`
+}
+
// User defines model for User.
type User struct {
DisplayName string `json:"display_name"`
@@ -309,435 +120,247 @@ type GetGameParams struct {
Authorization HeaderAuthorization `json:"Authorization"`
}
-// PostLoginJSONBody defines parameters for PostLogin.
-type PostLoginJSONBody struct {
- Password string `json:"password"`
- Username string `json:"username"`
+// PostGamePlayCodeJSONBody defines parameters for PostGamePlayCode.
+type PostGamePlayCodeJSONBody struct {
+ Code string `json:"code"`
}
-// GetTokenParams defines parameters for GetToken.
-type GetTokenParams struct {
+// PostGamePlayCodeParams defines parameters for PostGamePlayCode.
+type PostGamePlayCodeParams struct {
Authorization HeaderAuthorization `json:"Authorization"`
}
-// PostLoginJSONRequestBody defines body for PostLogin for application/json ContentType.
-type PostLoginJSONRequestBody PostLoginJSONBody
-
-// AsGamePlayerMessageS2C returns the union data inside the GamePlayerMessage as a GamePlayerMessageS2C
-func (t GamePlayerMessage) AsGamePlayerMessageS2C() (GamePlayerMessageS2C, error) {
- var body GamePlayerMessageS2C
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGamePlayerMessageS2C overwrites any union data inside the GamePlayerMessage as the provided GamePlayerMessageS2C
-func (t *GamePlayerMessage) FromGamePlayerMessageS2C(v GamePlayerMessageS2C) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
-
-// MergeGamePlayerMessageS2C performs a merge with any union data inside the GamePlayerMessage, using the provided GamePlayerMessageS2C
-func (t *GamePlayerMessage) MergeGamePlayerMessageS2C(v GamePlayerMessageS2C) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
- }
-
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
-
-// AsGamePlayerMessageC2S returns the union data inside the GamePlayerMessage as a GamePlayerMessageC2S
-func (t GamePlayerMessage) AsGamePlayerMessageC2S() (GamePlayerMessageC2S, error) {
- var body GamePlayerMessageC2S
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGamePlayerMessageC2S overwrites any union data inside the GamePlayerMessage as the provided GamePlayerMessageC2S
-func (t *GamePlayerMessage) FromGamePlayerMessageC2S(v GamePlayerMessageC2S) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
-
-// MergeGamePlayerMessageC2S performs a merge with any union data inside the GamePlayerMessage, using the provided GamePlayerMessageC2S
-func (t *GamePlayerMessage) MergeGamePlayerMessageC2S(v GamePlayerMessageC2S) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
- }
-
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
-
-func (t GamePlayerMessage) MarshalJSON() ([]byte, error) {
- b, err := t.union.MarshalJSON()
- return b, err
-}
-
-func (t *GamePlayerMessage) UnmarshalJSON(b []byte) error {
- err := t.union.UnmarshalJSON(b)
- return err
+// GetGamePlayLatestStateParams defines parameters for GetGamePlayLatestState.
+type GetGamePlayLatestStateParams struct {
+ Authorization HeaderAuthorization `json:"Authorization"`
}
-// AsGamePlayerMessageC2SCode returns the union data inside the GamePlayerMessageC2S as a GamePlayerMessageC2SCode
-func (t GamePlayerMessageC2S) AsGamePlayerMessageC2SCode() (GamePlayerMessageC2SCode, error) {
- var body GamePlayerMessageC2SCode
- err := json.Unmarshal(t.union, &body)
- return body, err
+// PostGamePlaySubmitJSONBody defines parameters for PostGamePlaySubmit.
+type PostGamePlaySubmitJSONBody struct {
+ Code string `json:"code"`
}
-// FromGamePlayerMessageC2SCode overwrites any union data inside the GamePlayerMessageC2S as the provided GamePlayerMessageC2SCode
-func (t *GamePlayerMessageC2S) FromGamePlayerMessageC2SCode(v GamePlayerMessageC2SCode) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
+// PostGamePlaySubmitParams defines parameters for PostGamePlaySubmit.
+type PostGamePlaySubmitParams struct {
+ Authorization HeaderAuthorization `json:"Authorization"`
}
-// MergeGamePlayerMessageC2SCode performs a merge with any union data inside the GamePlayerMessageC2S, using the provided GamePlayerMessageC2SCode
-func (t *GamePlayerMessageC2S) MergeGamePlayerMessageC2SCode(v GamePlayerMessageC2SCode) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
- }
-
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
+// GetGameWatchLatestStatesParams defines parameters for GetGameWatchLatestStates.
+type GetGameWatchLatestStatesParams struct {
+ Authorization HeaderAuthorization `json:"Authorization"`
}
-// AsGamePlayerMessageC2SSubmit returns the union data inside the GamePlayerMessageC2S as a GamePlayerMessageC2SSubmit
-func (t GamePlayerMessageC2S) AsGamePlayerMessageC2SSubmit() (GamePlayerMessageC2SSubmit, error) {
- var body GamePlayerMessageC2SSubmit
- err := json.Unmarshal(t.union, &body)
- return body, err
+// GetGameWatchRankingParams defines parameters for GetGameWatchRanking.
+type GetGameWatchRankingParams struct {
+ Authorization HeaderAuthorization `json:"Authorization"`
}
-// FromGamePlayerMessageC2SSubmit overwrites any union data inside the GamePlayerMessageC2S as the provided GamePlayerMessageC2SSubmit
-func (t *GamePlayerMessageC2S) FromGamePlayerMessageC2SSubmit(v GamePlayerMessageC2SSubmit) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
+// PostLoginJSONBody defines parameters for PostLogin.
+type PostLoginJSONBody struct {
+ Password string `json:"password"`
+ Username string `json:"username"`
}
-// MergeGamePlayerMessageC2SSubmit performs a merge with any union data inside the GamePlayerMessageC2S, using the provided GamePlayerMessageC2SSubmit
-func (t *GamePlayerMessageC2S) MergeGamePlayerMessageC2SSubmit(v GamePlayerMessageC2SSubmit) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
- }
-
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
+// PostGamePlayCodeJSONRequestBody defines body for PostGamePlayCode for application/json ContentType.
+type PostGamePlayCodeJSONRequestBody PostGamePlayCodeJSONBody
-func (t GamePlayerMessageC2S) MarshalJSON() ([]byte, error) {
- b, err := t.union.MarshalJSON()
- return b, err
-}
+// PostGamePlaySubmitJSONRequestBody defines body for PostGamePlaySubmit for application/json ContentType.
+type PostGamePlaySubmitJSONRequestBody PostGamePlaySubmitJSONBody
-func (t *GamePlayerMessageC2S) UnmarshalJSON(b []byte) error {
- err := t.union.UnmarshalJSON(b)
- return err
-}
+// PostLoginJSONRequestBody defines body for PostLogin for application/json ContentType.
+type PostLoginJSONRequestBody PostLoginJSONBody
-// AsGamePlayerMessageS2CStart returns the union data inside the GamePlayerMessageS2C as a GamePlayerMessageS2CStart
-func (t GamePlayerMessageS2C) AsGamePlayerMessageS2CStart() (GamePlayerMessageS2CStart, error) {
- var body GamePlayerMessageS2CStart
- err := json.Unmarshal(t.union, &body)
- return body, err
+// ServerInterface represents all server handlers.
+type ServerInterface interface {
+ // List games
+ // (GET /games)
+ GetGames(ctx echo.Context, params GetGamesParams) error
+ // Get a game
+ // (GET /games/{game_id})
+ GetGame(ctx echo.Context, gameID PathGameID, params GetGameParams) error
+ // Post the latest code
+ // (POST /games/{game_id}/play/code)
+ PostGamePlayCode(ctx echo.Context, gameID PathGameID, params PostGamePlayCodeParams) error
+ // Get the latest execution result for player
+ // (GET /games/{game_id}/play/latest_state)
+ GetGamePlayLatestState(ctx echo.Context, gameID PathGameID, params GetGamePlayLatestStateParams) error
+ // Submit the answer
+ // (POST /games/{game_id}/play/submit)
+ PostGamePlaySubmit(ctx echo.Context, gameID PathGameID, params PostGamePlaySubmitParams) error
+ // Get all the latest game states of the main players
+ // (GET /games/{game_id}/watch/latest_states)
+ GetGameWatchLatestStates(ctx echo.Context, gameID PathGameID, params GetGameWatchLatestStatesParams) error
+ // Get the latest player ranking
+ // (GET /games/{game_id}/watch/ranking)
+ GetGameWatchRanking(ctx echo.Context, gameID PathGameID, params GetGameWatchRankingParams) error
+ // User login
+ // (POST /login)
+ PostLogin(ctx echo.Context) error
}
-// FromGamePlayerMessageS2CStart overwrites any union data inside the GamePlayerMessageS2C as the provided GamePlayerMessageS2CStart
-func (t *GamePlayerMessageS2C) FromGamePlayerMessageS2CStart(v GamePlayerMessageS2CStart) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
+// ServerInterfaceWrapper converts echo contexts to parameters.
+type ServerInterfaceWrapper struct {
+ Handler ServerInterface
}
-// MergeGamePlayerMessageS2CStart performs a merge with any union data inside the GamePlayerMessageS2C, using the provided GamePlayerMessageS2CStart
-func (t *GamePlayerMessageS2C) MergeGamePlayerMessageS2CStart(v GamePlayerMessageS2CStart) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
- }
+// GetGames converts echo context to params.
+func (w *ServerInterfaceWrapper) GetGames(ctx echo.Context) error {
+ var err error
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
+ // Parameter object where we will unmarshal all parameters from the context
+ var params GetGamesParams
-// AsGamePlayerMessageS2CExecResult returns the union data inside the GamePlayerMessageS2C as a GamePlayerMessageS2CExecResult
-func (t GamePlayerMessageS2C) AsGamePlayerMessageS2CExecResult() (GamePlayerMessageS2CExecResult, error) {
- var body GamePlayerMessageS2CExecResult
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
+ headers := ctx.Request().Header
+ // ------------- Required header parameter "Authorization" -------------
+ if valueList, found := headers[http.CanonicalHeaderKey("Authorization")]; found {
+ var Authorization HeaderAuthorization
+ n := len(valueList)
+ if n != 1 {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for Authorization, got %d", n))
+ }
-// FromGamePlayerMessageS2CExecResult overwrites any union data inside the GamePlayerMessageS2C as the provided GamePlayerMessageS2CExecResult
-func (t *GamePlayerMessageS2C) FromGamePlayerMessageS2CExecResult(v GamePlayerMessageS2CExecResult) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+ err = runtime.BindStyledParameterWithOptions("simple", "Authorization", valueList[0], &Authorization, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationHeader, Explode: false, Required: true})
+ if err != nil {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter Authorization: %s", err))
+ }
-// MergeGamePlayerMessageS2CExecResult performs a merge with any union data inside the GamePlayerMessageS2C, using the provided GamePlayerMessageS2CExecResult
-func (t *GamePlayerMessageS2C) MergeGamePlayerMessageS2CExecResult(v GamePlayerMessageS2CExecResult) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
+ params.Authorization = Authorization
+ } else {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Header parameter Authorization is required, but not found"))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
+ // Invoke the callback with all the unmarshaled arguments
+ err = w.Handler.GetGames(ctx, params)
return err
}
-// AsGamePlayerMessageS2CSubmitResult returns the union data inside the GamePlayerMessageS2C as a GamePlayerMessageS2CSubmitResult
-func (t GamePlayerMessageS2C) AsGamePlayerMessageS2CSubmitResult() (GamePlayerMessageS2CSubmitResult, error) {
- var body GamePlayerMessageS2CSubmitResult
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGamePlayerMessageS2CSubmitResult overwrites any union data inside the GamePlayerMessageS2C as the provided GamePlayerMessageS2CSubmitResult
-func (t *GamePlayerMessageS2C) FromGamePlayerMessageS2CSubmitResult(v GamePlayerMessageS2CSubmitResult) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+// GetGame converts echo context to params.
+func (w *ServerInterfaceWrapper) GetGame(ctx echo.Context) error {
+ var err error
+ // ------------- Path parameter "game_id" -------------
+ var gameID PathGameID
-// MergeGamePlayerMessageS2CSubmitResult performs a merge with any union data inside the GamePlayerMessageS2C, using the provided GamePlayerMessageS2CSubmitResult
-func (t *GamePlayerMessageS2C) MergeGamePlayerMessageS2CSubmitResult(v GamePlayerMessageS2CSubmitResult) error {
- b, err := json.Marshal(v)
+ err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
- return err
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
-
-func (t GamePlayerMessageS2C) MarshalJSON() ([]byte, error) {
- b, err := t.union.MarshalJSON()
- return b, err
-}
-
-func (t *GamePlayerMessageS2C) UnmarshalJSON(b []byte) error {
- err := t.union.UnmarshalJSON(b)
- return err
-}
+ // Parameter object where we will unmarshal all parameters from the context
+ var params GetGameParams
-// AsGameWatcherMessageS2C returns the union data inside the GameWatcherMessage as a GameWatcherMessageS2C
-func (t GameWatcherMessage) AsGameWatcherMessageS2C() (GameWatcherMessageS2C, error) {
- var body GameWatcherMessageS2C
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
+ headers := ctx.Request().Header
+ // ------------- Required header parameter "Authorization" -------------
+ if valueList, found := headers[http.CanonicalHeaderKey("Authorization")]; found {
+ var Authorization HeaderAuthorization
+ n := len(valueList)
+ if n != 1 {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for Authorization, got %d", n))
+ }
-// FromGameWatcherMessageS2C overwrites any union data inside the GameWatcherMessage as the provided GameWatcherMessageS2C
-func (t *GameWatcherMessage) FromGameWatcherMessageS2C(v GameWatcherMessageS2C) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+ err = runtime.BindStyledParameterWithOptions("simple", "Authorization", valueList[0], &Authorization, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationHeader, Explode: false, Required: true})
+ if err != nil {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter Authorization: %s", err))
+ }
-// MergeGameWatcherMessageS2C performs a merge with any union data inside the GameWatcherMessage, using the provided GameWatcherMessageS2C
-func (t *GameWatcherMessage) MergeGameWatcherMessageS2C(v GameWatcherMessageS2C) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
+ params.Authorization = Authorization
+ } else {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Header parameter Authorization is required, but not found"))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
-
-func (t GameWatcherMessage) MarshalJSON() ([]byte, error) {
- b, err := t.union.MarshalJSON()
- return b, err
-}
-
-func (t *GameWatcherMessage) UnmarshalJSON(b []byte) error {
- err := t.union.UnmarshalJSON(b)
+ // Invoke the callback with all the unmarshaled arguments
+ err = w.Handler.GetGame(ctx, gameID, params)
return err
}
-// AsGameWatcherMessageS2CStart returns the union data inside the GameWatcherMessageS2C as a GameWatcherMessageS2CStart
-func (t GameWatcherMessageS2C) AsGameWatcherMessageS2CStart() (GameWatcherMessageS2CStart, error) {
- var body GameWatcherMessageS2CStart
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGameWatcherMessageS2CStart overwrites any union data inside the GameWatcherMessageS2C as the provided GameWatcherMessageS2CStart
-func (t *GameWatcherMessageS2C) FromGameWatcherMessageS2CStart(v GameWatcherMessageS2CStart) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+// PostGamePlayCode converts echo context to params.
+func (w *ServerInterfaceWrapper) PostGamePlayCode(ctx echo.Context) error {
+ var err error
+ // ------------- Path parameter "game_id" -------------
+ var gameID PathGameID
-// MergeGameWatcherMessageS2CStart performs a merge with any union data inside the GameWatcherMessageS2C, using the provided GameWatcherMessageS2CStart
-func (t *GameWatcherMessageS2C) MergeGameWatcherMessageS2CStart(v GameWatcherMessageS2CStart) error {
- b, err := json.Marshal(v)
+ err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
- return err
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
+ // Parameter object where we will unmarshal all parameters from the context
+ var params PostGamePlayCodeParams
-// AsGameWatcherMessageS2CCode returns the union data inside the GameWatcherMessageS2C as a GameWatcherMessageS2CCode
-func (t GameWatcherMessageS2C) AsGameWatcherMessageS2CCode() (GameWatcherMessageS2CCode, error) {
- var body GameWatcherMessageS2CCode
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
+ headers := ctx.Request().Header
+ // ------------- Required header parameter "Authorization" -------------
+ if valueList, found := headers[http.CanonicalHeaderKey("Authorization")]; found {
+ var Authorization HeaderAuthorization
+ n := len(valueList)
+ if n != 1 {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for Authorization, got %d", n))
+ }
-// FromGameWatcherMessageS2CCode overwrites any union data inside the GameWatcherMessageS2C as the provided GameWatcherMessageS2CCode
-func (t *GameWatcherMessageS2C) FromGameWatcherMessageS2CCode(v GameWatcherMessageS2CCode) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+ err = runtime.BindStyledParameterWithOptions("simple", "Authorization", valueList[0], &Authorization, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationHeader, Explode: false, Required: true})
+ if err != nil {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter Authorization: %s", err))
+ }
-// MergeGameWatcherMessageS2CCode performs a merge with any union data inside the GameWatcherMessageS2C, using the provided GameWatcherMessageS2CCode
-func (t *GameWatcherMessageS2C) MergeGameWatcherMessageS2CCode(v GameWatcherMessageS2CCode) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
+ params.Authorization = Authorization
+ } else {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Header parameter Authorization is required, but not found"))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
+ // Invoke the callback with all the unmarshaled arguments
+ err = w.Handler.PostGamePlayCode(ctx, gameID, params)
return err
}
-// AsGameWatcherMessageS2CSubmit returns the union data inside the GameWatcherMessageS2C as a GameWatcherMessageS2CSubmit
-func (t GameWatcherMessageS2C) AsGameWatcherMessageS2CSubmit() (GameWatcherMessageS2CSubmit, error) {
- var body GameWatcherMessageS2CSubmit
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGameWatcherMessageS2CSubmit overwrites any union data inside the GameWatcherMessageS2C as the provided GameWatcherMessageS2CSubmit
-func (t *GameWatcherMessageS2C) FromGameWatcherMessageS2CSubmit(v GameWatcherMessageS2CSubmit) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+// GetGamePlayLatestState converts echo context to params.
+func (w *ServerInterfaceWrapper) GetGamePlayLatestState(ctx echo.Context) error {
+ var err error
+ // ------------- Path parameter "game_id" -------------
+ var gameID PathGameID
-// MergeGameWatcherMessageS2CSubmit performs a merge with any union data inside the GameWatcherMessageS2C, using the provided GameWatcherMessageS2CSubmit
-func (t *GameWatcherMessageS2C) MergeGameWatcherMessageS2CSubmit(v GameWatcherMessageS2CSubmit) error {
- b, err := json.Marshal(v)
+ err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
- return err
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
+ // Parameter object where we will unmarshal all parameters from the context
+ var params GetGamePlayLatestStateParams
-// AsGameWatcherMessageS2CExecResult returns the union data inside the GameWatcherMessageS2C as a GameWatcherMessageS2CExecResult
-func (t GameWatcherMessageS2C) AsGameWatcherMessageS2CExecResult() (GameWatcherMessageS2CExecResult, error) {
- var body GameWatcherMessageS2CExecResult
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
+ headers := ctx.Request().Header
+ // ------------- Required header parameter "Authorization" -------------
+ if valueList, found := headers[http.CanonicalHeaderKey("Authorization")]; found {
+ var Authorization HeaderAuthorization
+ n := len(valueList)
+ if n != 1 {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Expected one value for Authorization, got %d", n))
+ }
-// FromGameWatcherMessageS2CExecResult overwrites any union data inside the GameWatcherMessageS2C as the provided GameWatcherMessageS2CExecResult
-func (t *GameWatcherMessageS2C) FromGameWatcherMessageS2CExecResult(v GameWatcherMessageS2CExecResult) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+ err = runtime.BindStyledParameterWithOptions("simple", "Authorization", valueList[0], &Authorization, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationHeader, Explode: false, Required: true})
+ if err != nil {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter Authorization: %s", err))
+ }
-// MergeGameWatcherMessageS2CExecResult performs a merge with any union data inside the GameWatcherMessageS2C, using the provided GameWatcherMessageS2CExecResult
-func (t *GameWatcherMessageS2C) MergeGameWatcherMessageS2CExecResult(v GameWatcherMessageS2CExecResult) error {
- b, err := json.Marshal(v)
- if err != nil {
- return err
+ params.Authorization = Authorization
+ } else {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Header parameter Authorization is required, but not found"))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
+ // Invoke the callback with all the unmarshaled arguments
+ err = w.Handler.GetGamePlayLatestState(ctx, gameID, params)
return err
}
-// AsGameWatcherMessageS2CSubmitResult returns the union data inside the GameWatcherMessageS2C as a GameWatcherMessageS2CSubmitResult
-func (t GameWatcherMessageS2C) AsGameWatcherMessageS2CSubmitResult() (GameWatcherMessageS2CSubmitResult, error) {
- var body GameWatcherMessageS2CSubmitResult
- err := json.Unmarshal(t.union, &body)
- return body, err
-}
-
-// FromGameWatcherMessageS2CSubmitResult overwrites any union data inside the GameWatcherMessageS2C as the provided GameWatcherMessageS2CSubmitResult
-func (t *GameWatcherMessageS2C) FromGameWatcherMessageS2CSubmitResult(v GameWatcherMessageS2CSubmitResult) error {
- b, err := json.Marshal(v)
- t.union = b
- return err
-}
+// PostGamePlaySubmit converts echo context to params.
+func (w *ServerInterfaceWrapper) PostGamePlaySubmit(ctx echo.Context) error {
+ var err error
+ // ------------- Path parameter "game_id" -------------
+ var gameID PathGameID
-// MergeGameWatcherMessageS2CSubmitResult performs a merge with any union data inside the GameWatcherMessageS2C, using the provided GameWatcherMessageS2CSubmitResult
-func (t *GameWatcherMessageS2C) MergeGameWatcherMessageS2CSubmitResult(v GameWatcherMessageS2CSubmitResult) error {
- b, err := json.Marshal(v)
+ err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
- return err
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err))
}
- merged, err := runtime.JSONMerge(t.union, b)
- t.union = merged
- return err
-}
-
-func (t GameWatcherMessageS2C) MarshalJSON() ([]byte, error) {
- b, err := t.union.MarshalJSON()
- return b, err
-}
-
-func (t *GameWatcherMessageS2C) UnmarshalJSON(b []byte) error {
- err := t.union.UnmarshalJSON(b)
- return err
-}
-
-// ServerInterface represents all server handlers.
-type ServerInterface interface {
- // List games
- // (GET /games)
- GetGames(ctx echo.Context, params GetGamesParams) error
- // Get a game
- // (GET /games/{game_id})
- GetGame(ctx echo.Context, gameID PathGameID, params GetGameParams) error
- // User login
- // (POST /login)
- PostLogin(ctx echo.Context) error
- // Get a short-lived access token
- // (GET /token)
- GetToken(ctx echo.Context, params GetTokenParams) error
-}
-
-// ServerInterfaceWrapper converts echo contexts to parameters.
-type ServerInterfaceWrapper struct {
- Handler ServerInterface
-}
-
-// GetGames converts echo context to params.
-func (w *ServerInterfaceWrapper) GetGames(ctx echo.Context) error {
- var err error
-
// Parameter object where we will unmarshal all parameters from the context
- var params GetGamesParams
+ var params PostGamePlaySubmitParams
headers := ctx.Request().Header
// ------------- Required header parameter "Authorization" -------------
@@ -759,12 +382,12 @@ func (w *ServerInterfaceWrapper) GetGames(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshaled arguments
- err = w.Handler.GetGames(ctx, params)
+ err = w.Handler.PostGamePlaySubmit(ctx, gameID, params)
return err
}
-// GetGame converts echo context to params.
-func (w *ServerInterfaceWrapper) GetGame(ctx echo.Context) error {
+// GetGameWatchLatestStates converts echo context to params.
+func (w *ServerInterfaceWrapper) GetGameWatchLatestStates(ctx echo.Context) error {
var err error
// ------------- Path parameter "game_id" -------------
var gameID PathGameID
@@ -775,7 +398,7 @@ func (w *ServerInterfaceWrapper) GetGame(ctx echo.Context) error {
}
// Parameter object where we will unmarshal all parameters from the context
- var params GetGameParams
+ var params GetGameWatchLatestStatesParams
headers := ctx.Request().Header
// ------------- Required header parameter "Authorization" -------------
@@ -797,25 +420,23 @@ func (w *ServerInterfaceWrapper) GetGame(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshaled arguments
- err = w.Handler.GetGame(ctx, gameID, params)
+ err = w.Handler.GetGameWatchLatestStates(ctx, gameID, params)
return err
}
-// PostLogin converts echo context to params.
-func (w *ServerInterfaceWrapper) PostLogin(ctx echo.Context) error {
+// GetGameWatchRanking converts echo context to params.
+func (w *ServerInterfaceWrapper) GetGameWatchRanking(ctx echo.Context) error {
var err error
+ // ------------- Path parameter "game_id" -------------
+ var gameID PathGameID
- // Invoke the callback with all the unmarshaled arguments
- err = w.Handler.PostLogin(ctx)
- return err
-}
-
-// GetToken converts echo context to params.
-func (w *ServerInterfaceWrapper) GetToken(ctx echo.Context) error {
- var err error
+ err = runtime.BindStyledParameterWithOptions("simple", "game_id", ctx.Param("game_id"), &gameID, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
+ if err != nil {
+ return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter game_id: %s", err))
+ }
// Parameter object where we will unmarshal all parameters from the context
- var params GetTokenParams
+ var params GetGameWatchRankingParams
headers := ctx.Request().Header
// ------------- Required header parameter "Authorization" -------------
@@ -837,7 +458,16 @@ func (w *ServerInterfaceWrapper) GetToken(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshaled arguments
- err = w.Handler.GetToken(ctx, params)
+ err = w.Handler.GetGameWatchRanking(ctx, gameID, params)
+ return err
+}
+
+// PostLogin converts echo context to params.
+func (w *ServerInterfaceWrapper) PostLogin(ctx echo.Context) error {
+ var err error
+
+ // Invoke the callback with all the unmarshaled arguments
+ err = w.Handler.PostLogin(ctx)
return err
}
@@ -871,8 +501,12 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
router.GET(baseURL+"/games", wrapper.GetGames)
router.GET(baseURL+"/games/:game_id", wrapper.GetGame)
+ router.POST(baseURL+"/games/:game_id/play/code", wrapper.PostGamePlayCode)
+ router.GET(baseURL+"/games/:game_id/play/latest_state", wrapper.GetGamePlayLatestState)
+ router.POST(baseURL+"/games/:game_id/play/submit", wrapper.PostGamePlaySubmit)
+ router.GET(baseURL+"/games/:game_id/watch/latest_states", wrapper.GetGameWatchLatestStates)
+ router.GET(baseURL+"/games/:game_id/watch/ranking", wrapper.GetGameWatchRanking)
router.POST(baseURL+"/login", wrapper.PostLogin)
- router.GET(baseURL+"/token", wrapper.GetToken)
}
@@ -968,56 +602,259 @@ func (response GetGame404JSONResponse) VisitGetGameResponse(w http.ResponseWrite
return json.NewEncoder(w).Encode(response)
}
-type PostLoginRequestObject struct {
- Body *PostLoginJSONRequestBody
+type PostGamePlayCodeRequestObject struct {
+ GameID PathGameID `json:"game_id"`
+ Params PostGamePlayCodeParams
+ Body *PostGamePlayCodeJSONRequestBody
}
-type PostLoginResponseObject interface {
- VisitPostLoginResponse(w http.ResponseWriter) error
+type PostGamePlayCodeResponseObject interface {
+ VisitPostGamePlayCodeResponse(w http.ResponseWriter) error
}
-type PostLogin200JSONResponse struct {
- Token string `json:"token"`
+type PostGamePlayCode200Response struct {
}
-func (response PostLogin200JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error {
+func (response PostGamePlayCode200Response) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error {
+ w.WriteHeader(200)
+ return nil
+}
+
+type PostGamePlayCode401JSONResponse struct{ UnauthorizedJSONResponse }
+
+func (response PostGamePlayCode401JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(401)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostGamePlayCode403JSONResponse struct{ ForbiddenJSONResponse }
+
+func (response PostGamePlayCode403JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(403)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostGamePlayCode404JSONResponse struct{ NotFoundJSONResponse }
+
+func (response PostGamePlayCode404JSONResponse) VisitPostGamePlayCodeResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(404)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGamePlayLatestStateRequestObject struct {
+ GameID PathGameID `json:"game_id"`
+ Params GetGamePlayLatestStateParams
+}
+
+type GetGamePlayLatestStateResponseObject interface {
+ VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error
+}
+
+type GetGamePlayLatestState200JSONResponse struct {
+ State LatestGameState `json:"state"`
+}
+
+func (response GetGamePlayLatestState200JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
return json.NewEncoder(w).Encode(response)
}
-type PostLogin401JSONResponse struct{ UnauthorizedJSONResponse }
+type GetGamePlayLatestState401JSONResponse struct{ UnauthorizedJSONResponse }
-func (response PostLogin401JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error {
+func (response GetGamePlayLatestState401JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(401)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGamePlayLatestState403JSONResponse struct{ ForbiddenJSONResponse }
+
+func (response GetGamePlayLatestState403JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(403)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGamePlayLatestState404JSONResponse struct{ NotFoundJSONResponse }
+
+func (response GetGamePlayLatestState404JSONResponse) VisitGetGamePlayLatestStateResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(404)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostGamePlaySubmitRequestObject struct {
+ GameID PathGameID `json:"game_id"`
+ Params PostGamePlaySubmitParams
+ Body *PostGamePlaySubmitJSONRequestBody
+}
+
+type PostGamePlaySubmitResponseObject interface {
+ VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error
+}
+
+type PostGamePlaySubmit200Response struct {
+}
+
+func (response PostGamePlaySubmit200Response) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error {
+ w.WriteHeader(200)
+ return nil
+}
+
+type PostGamePlaySubmit401JSONResponse struct{ UnauthorizedJSONResponse }
+
+func (response PostGamePlaySubmit401JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(401)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostGamePlaySubmit403JSONResponse struct{ ForbiddenJSONResponse }
+
+func (response PostGamePlaySubmit403JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(403)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostGamePlaySubmit404JSONResponse struct{ NotFoundJSONResponse }
+
+func (response PostGamePlaySubmit404JSONResponse) VisitPostGamePlaySubmitResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(404)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchLatestStatesRequestObject struct {
+ GameID PathGameID `json:"game_id"`
+ Params GetGameWatchLatestStatesParams
+}
+
+type GetGameWatchLatestStatesResponseObject interface {
+ VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error
+}
+
+type GetGameWatchLatestStates200JSONResponse struct {
+ States map[string]LatestGameState `json:"states"`
+}
+
+func (response GetGameWatchLatestStates200JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(200)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchLatestStates401JSONResponse struct{ UnauthorizedJSONResponse }
+
+func (response GetGameWatchLatestStates401JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(401)
return json.NewEncoder(w).Encode(response)
}
-type GetTokenRequestObject struct {
- Params GetTokenParams
+type GetGameWatchLatestStates403JSONResponse struct{ ForbiddenJSONResponse }
+
+func (response GetGameWatchLatestStates403JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(403)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchLatestStates404JSONResponse struct{ NotFoundJSONResponse }
+
+func (response GetGameWatchLatestStates404JSONResponse) VisitGetGameWatchLatestStatesResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(404)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchRankingRequestObject struct {
+ GameID PathGameID `json:"game_id"`
+ Params GetGameWatchRankingParams
+}
+
+type GetGameWatchRankingResponseObject interface {
+ VisitGetGameWatchRankingResponse(w http.ResponseWriter) error
+}
+
+type GetGameWatchRanking200JSONResponse struct {
+ Ranking []RankingEntry `json:"ranking"`
+}
+
+func (response GetGameWatchRanking200JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(200)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchRanking401JSONResponse struct{ UnauthorizedJSONResponse }
+
+func (response GetGameWatchRanking401JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(401)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchRanking403JSONResponse struct{ ForbiddenJSONResponse }
+
+func (response GetGameWatchRanking403JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(403)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type GetGameWatchRanking404JSONResponse struct{ NotFoundJSONResponse }
+
+func (response GetGameWatchRanking404JSONResponse) VisitGetGameWatchRankingResponse(w http.ResponseWriter) error {
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(404)
+
+ return json.NewEncoder(w).Encode(response)
+}
+
+type PostLoginRequestObject struct {
+ Body *PostLoginJSONRequestBody
}
-type GetTokenResponseObject interface {
- VisitGetTokenResponse(w http.ResponseWriter) error
+type PostLoginResponseObject interface {
+ VisitPostLoginResponse(w http.ResponseWriter) error
}
-type GetToken200JSONResponse struct {
+type PostLogin200JSONResponse struct {
Token string `json:"token"`
}
-func (response GetToken200JSONResponse) VisitGetTokenResponse(w http.ResponseWriter) error {
+func (response PostLogin200JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
return json.NewEncoder(w).Encode(response)
}
-type GetToken401JSONResponse struct{ UnauthorizedJSONResponse }
+type PostLogin401JSONResponse struct{ UnauthorizedJSONResponse }
-func (response GetToken401JSONResponse) VisitGetTokenResponse(w http.ResponseWriter) error {
+func (response PostLogin401JSONResponse) VisitPostLoginResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(401)
@@ -1032,12 +869,24 @@ type StrictServerInterface interface {
// Get a game
// (GET /games/{game_id})
GetGame(ctx context.Context, request GetGameRequestObject) (GetGameResponseObject, error)
+ // Post the latest code
+ // (POST /games/{game_id}/play/code)
+ PostGamePlayCode(ctx context.Context, request PostGamePlayCodeRequestObject) (PostGamePlayCodeResponseObject, error)
+ // Get the latest execution result for player
+ // (GET /games/{game_id}/play/latest_state)
+ GetGamePlayLatestState(ctx context.Context, request GetGamePlayLatestStateRequestObject) (GetGamePlayLatestStateResponseObject, error)
+ // Submit the answer
+ // (POST /games/{game_id}/play/submit)
+ PostGamePlaySubmit(ctx context.Context, request PostGamePlaySubmitRequestObject) (PostGamePlaySubmitResponseObject, error)
+ // Get all the latest game states of the main players
+ // (GET /games/{game_id}/watch/latest_states)
+ GetGameWatchLatestStates(ctx context.Context, request GetGameWatchLatestStatesRequestObject) (GetGameWatchLatestStatesResponseObject, error)
+ // Get the latest player ranking
+ // (GET /games/{game_id}/watch/ranking)
+ GetGameWatchRanking(ctx context.Context, request GetGameWatchRankingRequestObject) (GetGameWatchRankingResponseObject, error)
// User login
// (POST /login)
PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error)
- // Get a short-lived access token
- // (GET /token)
- GetToken(ctx context.Context, request GetTokenRequestObject) (GetTokenResponseObject, error)
}
type StrictHandlerFunc = strictecho.StrictEchoHandlerFunc
@@ -1103,54 +952,171 @@ func (sh *strictHandler) GetGame(ctx echo.Context, gameID PathGameID, params Get
return nil
}
-// PostLogin operation middleware
-func (sh *strictHandler) PostLogin(ctx echo.Context) error {
- var request PostLoginRequestObject
+// PostGamePlayCode operation middleware
+func (sh *strictHandler) PostGamePlayCode(ctx echo.Context, gameID PathGameID, params PostGamePlayCodeParams) error {
+ var request PostGamePlayCodeRequestObject
- var body PostLoginJSONRequestBody
+ request.GameID = gameID
+ request.Params = params
+
+ var body PostGamePlayCodeJSONRequestBody
if err := ctx.Bind(&body); err != nil {
return err
}
request.Body = &body
handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
- return sh.ssi.PostLogin(ctx.Request().Context(), request.(PostLoginRequestObject))
+ return sh.ssi.PostGamePlayCode(ctx.Request().Context(), request.(PostGamePlayCodeRequestObject))
}
for _, middleware := range sh.middlewares {
- handler = middleware(handler, "PostLogin")
+ handler = middleware(handler, "PostGamePlayCode")
}
response, err := handler(ctx, request)
if err != nil {
return err
- } else if validResponse, ok := response.(PostLoginResponseObject); ok {
- return validResponse.VisitPostLoginResponse(ctx.Response())
+ } else if validResponse, ok := response.(PostGamePlayCodeResponseObject); ok {
+ return validResponse.VisitPostGamePlayCodeResponse(ctx.Response())
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
-// GetToken operation middleware
-func (sh *strictHandler) GetToken(ctx echo.Context, params GetTokenParams) error {
- var request GetTokenRequestObject
+// GetGamePlayLatestState operation middleware
+func (sh *strictHandler) GetGamePlayLatestState(ctx echo.Context, gameID PathGameID, params GetGamePlayLatestStateParams) error {
+ var request GetGamePlayLatestStateRequestObject
+ request.GameID = gameID
request.Params = params
handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
- return sh.ssi.GetToken(ctx.Request().Context(), request.(GetTokenRequestObject))
+ return sh.ssi.GetGamePlayLatestState(ctx.Request().Context(), request.(GetGamePlayLatestStateRequestObject))
}
for _, middleware := range sh.middlewares {
- handler = middleware(handler, "GetToken")
+ handler = middleware(handler, "GetGamePlayLatestState")
}
response, err := handler(ctx, request)
if err != nil {
return err
- } else if validResponse, ok := response.(GetTokenResponseObject); ok {
- return validResponse.VisitGetTokenResponse(ctx.Response())
+ } else if validResponse, ok := response.(GetGamePlayLatestStateResponseObject); ok {
+ return validResponse.VisitGetGamePlayLatestStateResponse(ctx.Response())
+ } else if response != nil {
+ return fmt.Errorf("unexpected response type: %T", response)
+ }
+ return nil
+}
+
+// PostGamePlaySubmit operation middleware
+func (sh *strictHandler) PostGamePlaySubmit(ctx echo.Context, gameID PathGameID, params PostGamePlaySubmitParams) error {
+ var request PostGamePlaySubmitRequestObject
+
+ request.GameID = gameID
+ request.Params = params
+
+ var body PostGamePlaySubmitJSONRequestBody
+ if err := ctx.Bind(&body); err != nil {
+ return err
+ }
+ request.Body = &body
+
+ handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
+ return sh.ssi.PostGamePlaySubmit(ctx.Request().Context(), request.(PostGamePlaySubmitRequestObject))
+ }
+ for _, middleware := range sh.middlewares {
+ handler = middleware(handler, "PostGamePlaySubmit")
+ }
+
+ response, err := handler(ctx, request)
+
+ if err != nil {
+ return err
+ } else if validResponse, ok := response.(PostGamePlaySubmitResponseObject); ok {
+ return validResponse.VisitPostGamePlaySubmitResponse(ctx.Response())
+ } else if response != nil {
+ return fmt.Errorf("unexpected response type: %T", response)
+ }
+ return nil
+}
+
+// GetGameWatchLatestStates operation middleware
+func (sh *strictHandler) GetGameWatchLatestStates(ctx echo.Context, gameID PathGameID, params GetGameWatchLatestStatesParams) error {
+ var request GetGameWatchLatestStatesRequestObject
+
+ request.GameID = gameID
+ request.Params = params
+
+ handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
+ return sh.ssi.GetGameWatchLatestStates(ctx.Request().Context(), request.(GetGameWatchLatestStatesRequestObject))
+ }
+ for _, middleware := range sh.middlewares {
+ handler = middleware(handler, "GetGameWatchLatestStates")
+ }
+
+ response, err := handler(ctx, request)
+
+ if err != nil {
+ return err
+ } else if validResponse, ok := response.(GetGameWatchLatestStatesResponseObject); ok {
+ return validResponse.VisitGetGameWatchLatestStatesResponse(ctx.Response())
+ } else if response != nil {
+ return fmt.Errorf("unexpected response type: %T", response)
+ }
+ return nil
+}
+
+// GetGameWatchRanking operation middleware
+func (sh *strictHandler) GetGameWatchRanking(ctx echo.Context, gameID PathGameID, params GetGameWatchRankingParams) error {
+ var request GetGameWatchRankingRequestObject
+
+ request.GameID = gameID
+ request.Params = params
+
+ handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
+ return sh.ssi.GetGameWatchRanking(ctx.Request().Context(), request.(GetGameWatchRankingRequestObject))
+ }
+ for _, middleware := range sh.middlewares {
+ handler = middleware(handler, "GetGameWatchRanking")
+ }
+
+ response, err := handler(ctx, request)
+
+ if err != nil {
+ return err
+ } else if validResponse, ok := response.(GetGameWatchRankingResponseObject); ok {
+ return validResponse.VisitGetGameWatchRankingResponse(ctx.Response())
+ } else if response != nil {
+ return fmt.Errorf("unexpected response type: %T", response)
+ }
+ return nil
+}
+
+// PostLogin operation middleware
+func (sh *strictHandler) PostLogin(ctx echo.Context) error {
+ var request PostLoginRequestObject
+
+ var body PostLoginJSONRequestBody
+ if err := ctx.Bind(&body); err != nil {
+ return err
+ }
+ request.Body = &body
+
+ handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
+ return sh.ssi.PostLogin(ctx.Request().Context(), request.(PostLoginRequestObject))
+ }
+ for _, middleware := range sh.middlewares {
+ handler = middleware(handler, "PostLogin")
+ }
+
+ response, err := handler(ctx, request)
+
+ if err != nil {
+ return err
+ } else if validResponse, ok := response.(PostLoginResponseObject); ok {
+ return validResponse.VisitPostLoginResponse(ctx.Response())
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
@@ -1160,33 +1126,29 @@ func (sh *strictHandler) GetToken(ctx echo.Context, params GetTokenParams) error
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/backend/api/handler.go b/backend/api/handler.go
index d16b731..26031f6 100644
--- a/backend/api/handler.go
+++ b/backend/api/handler.go
@@ -3,7 +3,6 @@ package api
import (
"context"
"errors"
- "fmt"
"log"
"net/http"
@@ -16,12 +15,13 @@ import (
)
type Handler struct {
- q *db.Queries
- hubs GameHubsInterface
+ q *db.Queries
+ hub GameHubInterface
}
-type GameHubsInterface interface {
- StartGame(gameID int) error
+type GameHubInterface interface {
+ CalcCodeSize(code string) int
+ EnqueueTestTasks(ctx context.Context, submissionID, gameID, userID int, code string) error
}
func (h *Handler) PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error) {
@@ -62,22 +62,14 @@ func (h *Handler) PostLogin(ctx context.Context, request PostLoginRequestObject)
}, nil
}
-func (h *Handler) GetToken(_ context.Context, _ GetTokenRequestObject, user *auth.JWTClaims) (GetTokenResponseObject, error) {
- newToken, err := auth.NewShortLivedJWT(user)
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
- }
- return GetToken200JSONResponse{
- Token: newToken,
- }, nil
-}
-
-func (h *Handler) GetGames(ctx context.Context, _ GetGamesRequestObject, user *auth.JWTClaims) (GetGamesResponseObject, error) {
- gameRows, err := h.q.ListGamesForPlayer(ctx, int32(user.UserID))
+func (h *Handler) GetGames(ctx context.Context, _ GetGamesRequestObject, _ *auth.JWTClaims) (GetGamesResponseObject, error) {
+ gameRows, err := h.q.ListPublicGames(ctx)
if err != nil {
return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
games := make([]Game, len(gameRows))
+ gameIDs := make([]int32, len(gameRows))
+ gameID2Index := make(map[int32]int, len(gameRows))
for i, row := range gameRows {
var startedAt *int64
if row.StartedAt.Valid {
@@ -87,7 +79,7 @@ func (h *Handler) GetGames(ctx context.Context, _ GetGamesRequestObject, user *a
games[i] = Game{
GameID: int(row.GameID),
GameType: GameGameType(row.GameType),
- State: GameState(row.State),
+ IsPublic: row.IsPublic,
DisplayName: row.DisplayName,
DurationSeconds: int(row.DurationSeconds),
StartedAt: startedAt,
@@ -97,15 +89,30 @@ func (h *Handler) GetGames(ctx context.Context, _ GetGamesRequestObject, user *a
Description: row.Description,
},
}
+ gameIDs[i] = row.GameID
+ gameID2Index[row.GameID] = i
+ }
+ mainPlayerRows, err := h.q.ListMainPlayers(ctx, gameIDs)
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ for _, row := range mainPlayerRows {
+ idx := gameID2Index[row.GameID]
+ game := &games[idx]
+ game.MainPlayers = append(game.MainPlayers, User{
+ UserID: int(row.UserID),
+ Username: row.Username,
+ DisplayName: row.DisplayName,
+ IconPath: row.IconPath,
+ IsAdmin: row.IsAdmin,
+ })
}
return GetGames200JSONResponse{
Games: games,
}, nil
}
-func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, user *auth.JWTClaims) (GetGameResponseObject, error) {
- // TODO: check user permission
- _ = user
+func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, _ *auth.JWTClaims) (GetGameResponseObject, error) {
gameID := request.GameID
row, err := h.q.GetGameByID(ctx, int32(gameID))
if err != nil {
@@ -118,18 +125,25 @@ func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, use
}
return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
+ if !row.IsPublic {
+ return GetGame404JSONResponse{
+ NotFoundJSONResponse: NotFoundJSONResponse{
+ Message: "Game not found",
+ },
+ }, nil
+ }
var startedAt *int64
if row.StartedAt.Valid {
startedAtTimestamp := row.StartedAt.Time.Unix()
startedAt = &startedAtTimestamp
}
- playerRows, err := h.q.ListGamePlayers(ctx, int32(gameID))
+ mainPlayerRows, err := h.q.ListMainPlayers(ctx, []int32{int32(gameID)})
if err != nil {
return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
}
- players := make([]User, len(playerRows))
- for i, playerRow := range playerRows {
- players[i] = User{
+ mainPlayers := make([]User, len(mainPlayerRows))
+ for i, playerRow := range mainPlayerRows {
+ mainPlayers[i] = User{
UserID: int(playerRow.UserID),
Username: playerRow.Username,
DisplayName: playerRow.DisplayName,
@@ -137,25 +151,10 @@ func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, use
IsAdmin: playerRow.IsAdmin,
}
}
- testcaseIDs, err := h.q.ListTestcaseIDsByGameID(ctx, int32(gameID))
- if err != nil {
- return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
- }
- execSteps := make([]ExecStep, len(testcaseIDs)+1)
- execSteps[0] = ExecStep{
- TestcaseID: nullable.NewNullNullable[int](),
- Label: "Compile",
- }
- for i, testcaseID := range testcaseIDs {
- execSteps[i+1] = ExecStep{
- TestcaseID: nullable.NewNullableWithValue(int(testcaseID)),
- Label: fmt.Sprintf("Testcase %d", i+1),
- }
- }
game := Game{
GameID: int(row.GameID),
GameType: GameGameType(row.GameType),
- State: GameState(row.State),
+ IsPublic: row.IsPublic,
DisplayName: row.DisplayName,
DurationSeconds: int(row.DurationSeconds),
StartedAt: startedAt,
@@ -164,10 +163,158 @@ func (h *Handler) GetGame(ctx context.Context, request GetGameRequestObject, use
Title: row.Title,
Description: row.Description,
},
- Players: players,
- ExecSteps: execSteps,
+ MainPlayers: mainPlayers,
}
return GetGame200JSONResponse{
Game: game,
}, nil
}
+
+func (h *Handler) GetGamePlayLatestState(ctx context.Context, request GetGamePlayLatestStateRequestObject, user *auth.JWTClaims) (GetGamePlayLatestStateResponseObject, error) {
+ gameID := request.GameID
+ userID := user.UserID
+ row, err := h.q.GetLatestState(ctx, db.GetLatestStateParams{
+ GameID: int32(gameID),
+ UserID: int32(userID),
+ })
+ if err != nil {
+ if errors.Is(err, pgx.ErrNoRows) {
+ return GetGamePlayLatestState200JSONResponse{
+ State: LatestGameState{
+ Code: "",
+ Score: nullable.NewNullNullable[int](),
+ Status: None,
+ },
+ }, nil
+ }
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ var score nullable.Nullable[int]
+ if row.CodeSize != nil {
+ score = nullable.NewNullableWithValue(int(*row.CodeSize))
+ } else {
+ score = nullable.NewNullNullable[int]()
+ }
+ return GetGamePlayLatestState200JSONResponse{
+ State: LatestGameState{
+ Code: row.Code,
+ Score: score,
+ Status: ExecutionStatus(row.Status),
+ },
+ }, nil
+}
+
+func (h *Handler) GetGameWatchLatestStates(ctx context.Context, request GetGameWatchLatestStatesRequestObject, user *auth.JWTClaims) (GetGameWatchLatestStatesResponseObject, error) {
+ gameID := request.GameID
+ rows, err := h.q.GetLatestStatesOfMainPlayers(ctx, int32(gameID))
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ states := make(map[string]LatestGameState, len(rows))
+ for _, row := range rows {
+ var code string
+ if row.Code != nil {
+ code = *row.Code
+ }
+ var score nullable.Nullable[int]
+ if row.CodeSize != nil {
+ score = nullable.NewNullableWithValue(int(*row.CodeSize))
+ } else {
+ score = nullable.NewNullNullable[int]()
+ }
+ var status ExecutionStatus
+ if row.Status != nil {
+ status = ExecutionStatus(*row.Status)
+ } else {
+ status = None
+ }
+ states[string(row.UserID)] = LatestGameState{
+ Code: code,
+ Score: score,
+ Status: status,
+ }
+
+ if int(row.UserID) == user.UserID {
+ return GetGameWatchLatestStates403JSONResponse{
+ ForbiddenJSONResponse: ForbiddenJSONResponse{
+ Message: "You are one of the main players of this game",
+ },
+ }, nil
+ }
+ }
+ return GetGameWatchLatestStates200JSONResponse{
+ States: states,
+ }, nil
+}
+
+func (h *Handler) GetGameWatchRanking(ctx context.Context, request GetGameWatchRankingRequestObject, _ *auth.JWTClaims) (GetGameWatchRankingResponseObject, error) {
+ gameID := request.GameID
+ rows, err := h.q.GetRanking(ctx, int32(gameID))
+ if err != nil {
+ if errors.Is(err, pgx.ErrNoRows) {
+ return GetGameWatchRanking200JSONResponse{}, nil
+ }
+ }
+ ranking := make([]RankingEntry, len(rows))
+ for i, row := range rows {
+ ranking[i] = RankingEntry{
+ Player: User{
+ UserID: int(row.UserID),
+ Username: row.Username,
+ DisplayName: row.DisplayName,
+ IconPath: row.IconPath,
+ IsAdmin: row.IsAdmin,
+ },
+ Score: int(row.CodeSize),
+ }
+ }
+ return GetGameWatchRanking200JSONResponse{
+ Ranking: ranking,
+ }, nil
+}
+
+func (h *Handler) PostGamePlayCode(ctx context.Context, request PostGamePlayCodeRequestObject, user *auth.JWTClaims) (PostGamePlayCodeResponseObject, error) {
+ gameID := request.GameID
+ userID := user.UserID
+ err := h.q.UpdateCode(ctx, db.UpdateCodeParams{
+ GameID: int32(gameID),
+ UserID: int32(userID),
+ Code: request.Body.Code,
+ Status: "none",
+ })
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ return PostGamePlayCode200Response{}, nil
+}
+
+func (h *Handler) PostGamePlaySubmit(ctx context.Context, request PostGamePlaySubmitRequestObject, user *auth.JWTClaims) (PostGamePlaySubmitResponseObject, error) {
+ gameID := request.GameID
+ userID := user.UserID
+ code := request.Body.Code
+ codeSize := h.hub.CalcCodeSize(code)
+ // TODO: transaction
+ err := h.q.UpdateCode(ctx, db.UpdateCodeParams{
+ GameID: int32(gameID),
+ UserID: int32(userID),
+ Code: code,
+ Status: "running",
+ })
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ submissionID, err := h.q.CreateSubmission(ctx, db.CreateSubmissionParams{
+ GameID: int32(gameID),
+ UserID: int32(userID),
+ Code: code,
+ CodeSize: int32(codeSize),
+ })
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ err = h.hub.EnqueueTestTasks(ctx, int(submissionID), gameID, userID, code)
+ if err != nil {
+ return nil, echo.NewHTTPError(http.StatusInternalServerError, err.Error())
+ }
+ return PostGamePlaySubmit200Response{}, nil
+}
diff --git a/backend/api/handler_wrapper.go b/backend/api/handler_wrapper.go
index 681b064..95e6d2b 100644
--- a/backend/api/handler_wrapper.go
+++ b/backend/api/handler_wrapper.go
@@ -17,11 +17,11 @@ type HandlerWrapper struct {
impl Handler
}
-func NewHandler(queries *db.Queries, hubs GameHubsInterface) *HandlerWrapper {
+func NewHandler(queries *db.Queries, hub GameHubInterface) *HandlerWrapper {
return &HandlerWrapper{
impl: Handler{
- q: queries,
- hubs: hubs,
+ q: queries,
+ hub: hub,
},
}
}
@@ -51,6 +51,42 @@ func (h *HandlerWrapper) GetGame(ctx context.Context, request GetGameRequestObje
return h.impl.GetGame(ctx, request, user)
}
+func (h *HandlerWrapper) GetGamePlayLatestState(ctx context.Context, request GetGamePlayLatestStateRequestObject) (GetGamePlayLatestStateResponseObject, error) {
+ user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
+ if err != nil {
+ return GetGamePlayLatestState401JSONResponse{
+ UnauthorizedJSONResponse: UnauthorizedJSONResponse{
+ Message: "Unauthorized",
+ },
+ }, nil
+ }
+ return h.impl.GetGamePlayLatestState(ctx, request, user)
+}
+
+func (h *HandlerWrapper) GetGameWatchLatestStates(ctx context.Context, request GetGameWatchLatestStatesRequestObject) (GetGameWatchLatestStatesResponseObject, error) {
+ user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
+ if err != nil {
+ return GetGameWatchLatestStates401JSONResponse{
+ UnauthorizedJSONResponse: UnauthorizedJSONResponse{
+ Message: "Unauthorized",
+ },
+ }, nil
+ }
+ return h.impl.GetGameWatchLatestStates(ctx, request, user)
+}
+
+func (h *HandlerWrapper) GetGameWatchRanking(ctx context.Context, request GetGameWatchRankingRequestObject) (GetGameWatchRankingResponseObject, error) {
+ user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
+ if err != nil {
+ return GetGameWatchRanking401JSONResponse{
+ UnauthorizedJSONResponse: UnauthorizedJSONResponse{
+ Message: "Unauthorized",
+ },
+ }, nil
+ }
+ return h.impl.GetGameWatchRanking(ctx, request, user)
+}
+
func (h *HandlerWrapper) GetGames(ctx context.Context, request GetGamesRequestObject) (GetGamesResponseObject, error) {
user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
if err != nil {
@@ -63,16 +99,28 @@ func (h *HandlerWrapper) GetGames(ctx context.Context, request GetGamesRequestOb
return h.impl.GetGames(ctx, request, user)
}
-func (h *HandlerWrapper) GetToken(ctx context.Context, request GetTokenRequestObject) (GetTokenResponseObject, error) {
+func (h *HandlerWrapper) PostGamePlayCode(ctx context.Context, request PostGamePlayCodeRequestObject) (PostGamePlayCodeResponseObject, error) {
+ user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
+ if err != nil {
+ return PostGamePlayCode401JSONResponse{
+ UnauthorizedJSONResponse: UnauthorizedJSONResponse{
+ Message: "Unauthorized",
+ },
+ }, nil
+ }
+ return h.impl.PostGamePlayCode(ctx, request, user)
+}
+
+func (h *HandlerWrapper) PostGamePlaySubmit(ctx context.Context, request PostGamePlaySubmitRequestObject) (PostGamePlaySubmitResponseObject, error) {
user, err := parseJWTClaimsFromAuthorizationHeader(request.Params.Authorization)
if err != nil {
- return GetToken401JSONResponse{
+ return PostGamePlaySubmit401JSONResponse{
UnauthorizedJSONResponse: UnauthorizedJSONResponse{
Message: "Unauthorized",
},
}, nil
}
- return h.impl.GetToken(ctx, request, user)
+ return h.impl.PostGamePlaySubmit(ctx, request, user)
}
func (h *HandlerWrapper) PostLogin(ctx context.Context, request PostLoginRequestObject) (PostLoginResponseObject, error) {