package contract import ( "time" "github.com/google/uuid" ) type CreateGamePrizeRequest struct { GameID uuid.UUID `json:"game_id" validate:"required"` Name string `json:"name" validate:"required"` Weight int `json:"weight" validate:"min=1"` Stock int `json:"stock" validate:"min=0"` MaxStock *int `json:"max_stock,omitempty"` Threshold *int64 `json:"threshold,omitempty"` FallbackPrizeID *uuid.UUID `json:"fallback_prize_id,omitempty"` Image *string `json:"image,omitempty" validate:"omitempty,max=500"` Metadata map[string]interface{} `json:"metadata"` } type UpdateGamePrizeRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,required"` Weight *int `json:"weight,omitempty" validate:"omitempty,min=1"` Stock *int `json:"stock,omitempty" validate:"omitempty,min=0"` MaxStock *int `json:"max_stock,omitempty"` Threshold *int64 `json:"threshold,omitempty"` FallbackPrizeID *uuid.UUID `json:"fallback_prize_id,omitempty"` Image *string `json:"image,omitempty" validate:"omitempty,max=500"` Metadata map[string]interface{} `json:"metadata,omitempty"` } type GamePrizeResponse struct { ID uuid.UUID `json:"id"` GameID uuid.UUID `json:"game_id"` Name string `json:"name"` Weight int `json:"weight"` Stock int `json:"stock"` MaxStock *int `json:"max_stock,omitempty"` Threshold *int64 `json:"threshold,omitempty"` FallbackPrizeID *uuid.UUID `json:"fallback_prize_id,omitempty"` Image *string `json:"image,omitempty"` Metadata map[string]interface{} `json:"metadata"` Game *GameResponse `json:"game,omitempty"` FallbackPrize *GamePrizeResponse `json:"fallback_prize,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ListGamePrizesRequest struct { Page int `json:"page" form:"page" validate:"min=1"` Limit int `json:"limit" form:"limit" validate:"min=1,max=100"` Search string `json:"search" form:"search"` GameID *uuid.UUID `json:"game_id" form:"game_id"` SortBy string `json:"sort_by" form:"sort_by" validate:"omitempty,oneof=name weight stock created_at updated_at"` SortOrder string `json:"sort_order" form:"sort_order" validate:"omitempty,oneof=asc desc"` } type PaginatedGamePrizesResponse struct { Data []GamePrizeResponse `json:"data"` TotalCount int `json:"total_count"` Page int `json:"page"` Limit int `json:"limit"` TotalPages int `json:"total_pages"` }