package contract import ( "time" "github.com/google/uuid" ) type CreateGameRequest struct { Name string `json:"name" validate:"required"` Type string `json:"type" validate:"required,oneof=SPIN RAFFLE MINIGAME"` IsActive bool `json:"is_active"` Metadata map[string]interface{} `json:"metadata"` } type UpdateGameRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,required"` Type *string `json:"type,omitempty" validate:"omitempty,oneof=SPIN RAFFLE MINIGAME"` IsActive *bool `json:"is_active,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` } type GameResponse struct { ID uuid.UUID `json:"id"` Name string `json:"name"` Type string `json:"type"` IsActive bool `json:"is_active"` Metadata map[string]interface{} `json:"metadata"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ListGamesRequest 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"` Type string `json:"type" form:"type" validate:"omitempty,oneof=SPIN RAFFLE MINIGAME"` IsActive *bool `json:"is_active" form:"is_active"` SortBy string `json:"sort_by" form:"sort_by" validate:"omitempty,oneof=name type created_at updated_at"` SortOrder string `json:"sort_order" form:"sort_order" validate:"omitempty,oneof=asc desc"` } type PaginatedGamesResponse struct { Data []GameResponse `json:"data"` TotalCount int `json:"total_count"` Page int `json:"page"` Limit int `json:"limit"` TotalPages int `json:"total_pages"` }