diff --git a/apis/admin/lottery.api b/apis/admin/lottery.api index c30172d..b83d400 100644 --- a/apis/admin/lottery.api +++ b/apis/admin/lottery.api @@ -49,11 +49,11 @@ service ppanel { @doc "Update prize" @handler UpdateLotteryPrize - put /prizes (UpdateAdminLotteryPrizeRequest) returns (AdminLotteryPrize) + put /prizes/:id (UpdateAdminLotteryPrizeRequest) returns (AdminLotteryPrize) @doc "Delete prize" @handler DeleteLotteryPrize - delete /prizes (AdminPrizeIdRequest) + delete /prizes/:id (AdminPrizeIdRequest) @doc "List prizes on an activity" @handler ListLotteryPrizes diff --git a/internal/handler/admin/lottery/lottery_handler.go b/internal/handler/admin/lottery/lottery_handler.go index 939ff63..15d911c 100644 --- a/internal/handler/admin/lottery/lottery_handler.go +++ b/internal/handler/admin/lottery/lottery_handler.go @@ -2,6 +2,8 @@ package lottery import ( + "strconv" + "github.com/gin-gonic/gin" adminlottery "github.com/perfect-panel/server/internal/logic/admin/lottery" "github.com/perfect-panel/server/internal/svc" @@ -118,6 +120,9 @@ func UpdateLotteryPrizeHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) return func(c *gin.Context) { var req types.UpdateAdminLotteryPrizeRequest _ = c.ShouldBind(&req) + if id, err := strconv.ParseInt(c.Param("id"), 10, 64); err == nil { + req.Id = id + } if err := svcCtx.Validate(&req); err != nil { result.ParamErrorResult(c, err) return @@ -132,6 +137,9 @@ func DeleteLotteryPrizeHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) return func(c *gin.Context) { var req types.AdminPrizeIdRequest _ = c.ShouldBind(&req) + if id, err := strconv.ParseInt(c.Param("id"), 10, 64); err == nil { + req.Id = id + } if err := svcCtx.Validate(&req); err != nil { result.ParamErrorResult(c, err) return diff --git a/internal/handler/lottery_routes.go b/internal/handler/lottery_routes.go index 14e57e4..ec38cee 100644 --- a/internal/handler/lottery_routes.go +++ b/internal/handler/lottery_routes.go @@ -35,8 +35,8 @@ func registerLotteryRoutes(router *gin.Engine, serverCtx *svc.ServiceContext) { adminGroup.PUT("/activities/rules", adminLottery.UpdateLotteryRulesHandler(serverCtx)) adminGroup.POST("/prizes", adminLottery.CreateLotteryPrizeHandler(serverCtx)) - adminGroup.PUT("/prizes", adminLottery.UpdateLotteryPrizeHandler(serverCtx)) - adminGroup.DELETE("/prizes", adminLottery.DeleteLotteryPrizeHandler(serverCtx)) + adminGroup.PUT("/prizes/:id", adminLottery.UpdateLotteryPrizeHandler(serverCtx)) + adminGroup.DELETE("/prizes/:id", adminLottery.DeleteLotteryPrizeHandler(serverCtx)) adminGroup.GET("/prizes", adminLottery.ListLotteryPrizesHandler(serverCtx)) adminGroup.POST("/chances/grant", adminLottery.GrantLotteryChanceHandler(serverCtx)) diff --git a/internal/types/lottery.go b/internal/types/lottery.go index 90f436b..a8b0ebc 100644 --- a/internal/types/lottery.go +++ b/internal/types/lottery.go @@ -261,9 +261,10 @@ type CreateAdminLotteryPrizeRequest struct { IsFallback bool `json:"is_fallback"` } -// UpdateAdminLotteryPrizeRequest updates mutable prize fields. +// UpdateAdminLotteryPrizeRequest updates mutable prize fields. Id comes from +// the URL path (PUT /prizes/:id), not the body. type UpdateAdminLotteryPrizeRequest struct { - Id int64 `json:"id" validate:"required"` + Id int64 `path:"id" json:"-" validate:"required"` Slot *int `json:"slot,omitempty"` Name string `json:"name,omitempty"` IconUrl string `json:"icon_url,omitempty"` @@ -283,9 +284,9 @@ type ListAdminLotteryPrizesResponse struct { List []AdminLotteryPrize `json:"list"` } -// AdminPrizeIdRequest is used by DELETE / GET single. +// AdminPrizeIdRequest is used by DELETE /prizes/:id. Id comes from the URL path. type AdminPrizeIdRequest struct { - Id int64 `form:"id" json:"id" validate:"required"` + Id int64 `path:"id" form:"id" json:"id" validate:"required"` } // GrantAdminLotteryChanceRequest gives a specified user N chances on an