fix: add frame
This commit is contained in:
@@ -8,13 +8,42 @@ type Frame struct {
|
||||
Title string `json:"title"`
|
||||
PriceCoins int64 `json:"price_coins"`
|
||||
VIP bool `json:"vip"`
|
||||
C1 string `json:"c1"` // رنگِ گرادیان (hex بدونِ #)؛ خالی ⇒ قابِ رتبه
|
||||
C2 string `json:"c2"`
|
||||
Owned bool `json:"owned"`
|
||||
}
|
||||
|
||||
// RankTierStyle رنگ و برچسبِ یک رتبه (برنز..پادشاه). سمتِ کلاینت hardcode نیست.
|
||||
type RankTierStyle struct {
|
||||
ID string `json:"id"`
|
||||
Label string `json:"label"`
|
||||
C1 string `json:"c1"`
|
||||
C2 string `json:"c2"`
|
||||
}
|
||||
|
||||
// RankTiers رنگ/برچسبِ همهی رتبهها را برمیگرداند (برای کشِ کلاینت).
|
||||
func (s *Service) RankTiers(ctx context.Context) ([]RankTierStyle, error) {
|
||||
rows, err := s.db.QueryContext(ctx,
|
||||
`SELECT id, label, c1, c2 FROM rank_tiers ORDER BY sort`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var tiers []RankTierStyle
|
||||
for rows.Next() {
|
||||
var t RankTierStyle
|
||||
if err := rows.Scan(&t.ID, &t.Label, &t.C1, &t.C2); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
tiers = append(tiers, t)
|
||||
}
|
||||
return tiers, rows.Err()
|
||||
}
|
||||
|
||||
// Frames قابهای فعال را با وضعیتِ مالکیتِ کاربر برمیگرداند.
|
||||
func (s *Service) Frames(ctx context.Context, userID int64) ([]Frame, error) {
|
||||
rows, err := s.db.QueryContext(ctx,
|
||||
`SELECT id, title, price_coins, vip FROM avatar_frames WHERE enabled = 1 ORDER BY sort`)
|
||||
`SELECT id, title, price_coins, vip, c1, c2 FROM avatar_frames WHERE enabled = 1 ORDER BY sort`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -24,7 +53,7 @@ func (s *Service) Frames(ctx context.Context, userID int64) ([]Frame, error) {
|
||||
for rows.Next() {
|
||||
var f Frame
|
||||
var vip int
|
||||
if err := rows.Scan(&f.ID, &f.Title, &f.PriceCoins, &vip); err != nil {
|
||||
if err := rows.Scan(&f.ID, &f.Title, &f.PriceCoins, &vip, &f.C1, &f.C2); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
f.VIP = vip == 1
|
||||
|
||||
@@ -171,7 +171,12 @@ func (h *Handler) Frames(w http.ResponseWriter, r *http.Request) {
|
||||
if p, _ := h.svc.GetProfile(r.Context(), id); p != nil {
|
||||
selected = p.SelectedFrame
|
||||
}
|
||||
httpx.JSON(w, http.StatusOK, map[string]any{"frames": frames, "selected": selected})
|
||||
tiers, _ := h.svc.RankTiers(r.Context())
|
||||
httpx.JSON(w, http.StatusOK, map[string]any{
|
||||
"frames": frames,
|
||||
"selected": selected,
|
||||
"rank_tiers": tiers,
|
||||
})
|
||||
}
|
||||
|
||||
// BuyFrame — POST /api/shop/buy-frame
|
||||
|
||||
Reference in New Issue
Block a user