M sdbapi/apierror/apierror.go => sdbapi/apierror/apierror.go +1 -0
@@ 24,4 24,5 @@ const (
GameCreationFailed string = "game creation failed"
GetAllFormingFailed string = "something went wrong while fetching all forming games"
GameStatePatchFailed string = "failed to patch game state"
+ NoGamesForUser = "no games found for user"
)
A sdbapi/db/game.go => sdbapi/db/game.go +28 -0
@@ 0,0 1,28 @@
+/*
+ * This file is part of sdbapi
+ * Copyright (C) 2022 Jonni Liljamo <jonni@liljamo.com>
+ *
+ * Licensed under GPL-3.0-only.
+ * See LICENSE for licensing information.
+ */
+
+package db
+
+import (
+ "api/apierror"
+ "api/models"
+
+ "errors"
+)
+
+// get games for a specific user with email
+func GetGamesForUser(id string) ([]models.Game, error) {
+ var games []models.Game
+ game_records := DbConn.Where("p1 = ? OR p2 = ?", id, id).Find(&games)
+ if game_records.Error != nil {
+ return []models.Game{}, errors.New(apierror.NoGamesForUser)
+ }
+
+ return games, nil
+}
+
A sdbapi/handlers/mygames.go => sdbapi/handlers/mygames.go +38 -0
@@ 0,0 1,38 @@
+/*
+ * This file is part of sdbapi
+ * Copyright (C) 2022 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 MyGames(c *gin.Context) {
+ var user models.User
+ record := db.DbConn.Where("email = ?", c.GetString("email")).First(&user)
+ if record.Error != nil {
+ c.JSON(http.StatusNotFound, gin.H{"error": apierror.UserNotFound})
+ c.Abort()
+ return
+ }
+
+ games, err := db.GetGamesForUser(user.ID)
+ if err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ c.Abort()
+ return
+ }
+
+ c.JSON(http.StatusOK, gin.H{"games": games})
+}
+
M sdbapi/main.go => sdbapi/main.go +1 -1
@@ 51,7 51,7 @@ func createRouter() *gin.Engine {
game.GET("/all_forming", handlers.FormingGames)
game.POST("/create", handlers.CreateGame)
game.PATCH("/:id/state", handlers.PatchGameState)
- //game.GET("/for_user/:id", handlers.UsersGames)
+ game.GET("/my_games", handlers.MyGames)
}
}
return router