diff --git a/docs/api/games/Add game.bru b/docs/api/games/Add game.bru index d7d2013..9791470 100644 --- a/docs/api/games/Add game.bru +++ b/docs/api/games/Add game.bru @@ -6,10 +6,17 @@ meta { post { url: {{base_url}}/api/user/games - body: none + body: json auth: inherit } +body:json { + { + "steamAppId": 105600 + } +} + settings { encodeUrl: true + timeout: 0 } diff --git a/main.go b/main.go index 2779b5d..71f2a3e 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "log" "net/http" "os" + "slices" "strconv" "strings" "time" @@ -267,8 +268,20 @@ func main() { return } - if tx := db.Create(game); tx.Error != nil { - sendError(w, "failed to create game", err, 400) + if tx := db.First(&model.Game{SteamAppID: game.SteamAppID}); tx.Error != nil { + // game doesn't exist in db, gonna create it real quick + if tx := db.Create(game); tx.Error != nil { + sendError(w, "failed to create game", err, 400) + return + } + } + + alreadyHasGame := !slices.ContainsFunc(user.Games, func(g model.Game) bool { + return g.SteamAppID == game.SteamAppID + }) + if !alreadyHasGame { + // user already has this game on the wishlist + sendError(w, "game is already on the wishlist", nil, 400) return } diff --git a/model/game.go b/model/game.go index 405f5e4..8a594ae 100644 --- a/model/game.go +++ b/model/game.go @@ -4,7 +4,7 @@ type Game struct { Model Name string `json:"name"` - SteamAppID int `json:"steamAppId"` + SteamAppID int `json:"steamAppId" gorm:"unique"` Image string `json:"image"` ReleaseDate string `json:"releaseDate"` }