A api/handlers/endgame.go => api/handlers/endgame.go +40 -0
@@ 0,0 1,40 @@
+/*
+ * This file is part of laurelin_api
+ * Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
+ *
+ * Licensed under GPL-3.0-only.
+ * See LICENSE for licensing information.
+ */
+
+package handlers
+
+import (
+ "api/apierror"
+ "api/db"
+ "api/models"
+ "net/http"
+
+ "github.com/gin-gonic/gin"
+)
+
+func EndGame(c *gin.Context) {
+ id := c.Param("id")
+
+ // fetch the game
+ var game models.Game
+ record := db.DbConn.Where("id = ?", id).First(&game)
+ if record.Error != nil {
+ c.JSON(http.StatusNotFound, gin.H{"error": apierror.GameNotFound})
+ c.Abort()
+ return
+ }
+
+ updatedGame := db.DbConn.Model(&game).Updates(models.Game{State: models.GAMESTATE_FINISHED})
+ if updatedGame.Error != nil {
+ c.JSON(http.StatusInternalServerError, gin.H{"error": apierror.Placeholder})
+ c.Abort()
+ return
+ }
+
+ c.JSON(http.StatusOK, gin.H{})
+}
M api/main.go => api/main.go +1 -0
@@ 62,6 62,7 @@ func createRouter() *gin.Engine {
game.PATCH("/:id/state", handlers.PatchGameState)
game.GET("/my_games", handlers.MyGames)
game.POST("/:id/join", handlers.JoinGame)
+ game.POST("/:id/end", handlers.EndGame)
}
action := api.Group("/game/action").Use(middlewares.Auth())
{