diff --git a/game-service/api/api.go b/game-service/api/api.go index 54e8234..26b1d86 100644 --- a/game-service/api/api.go +++ b/game-service/api/api.go @@ -9,21 +9,30 @@ import ( "game-service/game" ) +type userUri struct { + Username string `form:"username" binding:"required"` +} + type startQuery struct { - Username string `form:"username" binding:"required"` Zone string `form:"zone"` Location dto.PointDTO `form:"location"` } func handleGameStart(app *game.App) gin.HandlerFunc { return func(c *gin.Context) { + uri := &userUri{} + if err := c.ShouldBindUri(uri); err != nil { + abortWithStatusMessage(c, http.StatusBadRequest, err) + return + } + query := &startQuery{} - if err := c.ShouldBindJSON(query); err != nil { + if err := c.ShouldBindQuery(query); err != nil { abortWithStatusMessage(c, http.StatusBadRequest, err) return } - player, err := getPlayerDTO(c, query.Username) + player, err := getPlayerDTO(c, uri.Username) if err != nil { abortWithStatusMessage(c, http.StatusInternalServerError, err) return @@ -50,19 +59,15 @@ func handleGameStart(app *game.App) gin.HandlerFunc { } } -type stopQuery struct { - Username string `form:"username" binding:"required"` -} - func handleGameStop(app *game.App) gin.HandlerFunc { return func(c *gin.Context) { - query := &stopQuery{} - if err := c.ShouldBindJSON(query); err != nil { + uri := &userUri{} + if err := c.ShouldBindUri(uri); err != nil { abortWithStatusMessage(c, http.StatusBadRequest, err) return } - player, err := getPlayerDTO(c, query.Username) + player, err := getPlayerDTO(c, uri.Username) if err != nil { abortWithStatusMessage(c, http.StatusInternalServerError, err) return @@ -83,7 +88,6 @@ func handleGameStop(app *game.App) gin.HandlerFunc { } type actionQuery struct { - Username string `form:"username" binding:"required"` Action string `form:"action"` Type string `form:"type"` Location dto.PointDTO `form:"location"` @@ -91,13 +95,19 @@ type actionQuery struct { func handleGameAction(app *game.App) gin.HandlerFunc { return func(c *gin.Context) { + uri := &userUri{} + if err := c.ShouldBindUri(uri); err != nil { + abortWithStatusMessage(c, http.StatusBadRequest, err) + return + } + query := &actionQuery{} if err := c.ShouldBindJSON(query); err != nil { abortWithStatusMessage(c, http.StatusBadRequest, err) return } - player, err := getPlayerDTO(c, query.Username) + player, err := getPlayerDTO(c, uri.Username) if err != nil { abortWithStatusMessage(c, http.StatusInternalServerError, err) return diff --git a/game-service/api/server.go b/game-service/api/server.go index 4ad9773..8ad5fdd 100644 --- a/game-service/api/server.go +++ b/game-service/api/server.go @@ -40,9 +40,9 @@ func New(app *game.App) *gin.Engine { gm := r.Group("/game") { - gm.POST("/start", handleGameStart(app)) - gm.POST("/stop", handleGameStop(app)) - gm.POST("/action", handleGameAction(app)) + gm.GET("/:username", handleGameStart(app)) + gm.POST("/:username", handleGameStop(app)) + gm.DELETE("/:username", handleGameAction(app)) } return r diff --git a/simulator-script/simulator.py b/simulator-script/simulator.py index 730c252..41e5d6e 100644 --- a/simulator-script/simulator.py +++ b/simulator-script/simulator.py @@ -38,13 +38,12 @@ def simulate(base: str): x, y = (12, 13) - with session.post(url=urljoin(base, '/game/start'), json={ - "username": "leon", + with session.get(url=urljoin(base, '/game/leon'), params={ "zone": "mac", - "location": { - "x": x, - "y": y, - } + # "location": { + # "x": x, + # "y": y, + # } }) as r: print(f'>>> Starting game in Zone: MAC ({x}, {y})') pprint(data := r.json()) @@ -58,8 +57,7 @@ def simulate(base: str): time.sleep(2) x, y = x + random.randint(1, 10), y + random.randint(1, 10) action = random.choice(('Escaping', 'Fighting', 'Sheltering')) - with session.post(url=urljoin(base, '/game/action'), json={ - "username": "leon", + with session.post(url=urljoin(base, '/game/leon'), json={ "action": action, "type": "Cardio", "location": { @@ -72,9 +70,7 @@ def simulate(base: str): pprint(r.json()) time.sleep(1) - with session.post(url=urljoin(base, '/game/stop'), json={ - "username": "leon" - }) as r: + with session.delete(url=urljoin(base, '/game/leon')) as r: print('Stopping game...') pprint(r.json()) time.sleep(1)