feat: add stickers
This commit is contained in:
@@ -2,11 +2,14 @@ package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/prabhupadasays/spsays-bff/internal/middleware"
|
||||
"github.com/prabhupadasays/spsays-bff/internal/model"
|
||||
"github.com/prabhupadasays/spsays-bff/internal/repository"
|
||||
"github.com/prabhupadasays/spsays-bff/internal/service"
|
||||
"github.com/prabhupadasays/spsays-bff/pkg/response"
|
||||
)
|
||||
@@ -114,6 +117,55 @@ func (h *SadhnaHandler) Rewards(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// AckRewards — POST /sadhna/rewards/ack. Clears pending celebrations once the
|
||||
// client has shown the confetti, so a gift surfaces exactly once.
|
||||
// OpenGift — POST /sadhna/rewards/gifts/{key}/open
|
||||
//
|
||||
// Called after the celebration is dismissed. Idempotent: opening an already
|
||||
// opened gift changes nothing.
|
||||
func (h *SadhnaHandler) OpenGift(w http.ResponseWriter, r *http.Request) {
|
||||
if err := h.svc.OpenGift(r.Context(),
|
||||
middleware.UserID(r.Context()), chi.URLParam(r, "key")); err != nil {
|
||||
response.Error(w, http.StatusInternalServerError, "could not open that gift")
|
||||
return
|
||||
}
|
||||
response.NoContent(w)
|
||||
}
|
||||
|
||||
// GiftableRewards — GET /admin/reward-gifts/catalog
|
||||
func (h *SadhnaHandler) GiftableRewards(w http.ResponseWriter, r *http.Request) {
|
||||
list, err := h.svc.GiftableRewards(r.Context())
|
||||
if err != nil {
|
||||
response.Error(w, http.StatusInternalServerError, "could not load the catalog")
|
||||
return
|
||||
}
|
||||
response.JSON(w, http.StatusOK, list)
|
||||
}
|
||||
|
||||
type giftReq struct {
|
||||
RewardKey string `json:"reward_key"`
|
||||
}
|
||||
|
||||
// GiftToEveryone — POST /admin/reward-gifts
|
||||
//
|
||||
// Hands one reward to every account, unopened. Idempotent, so a repeated
|
||||
// click tops up only the people who don't have it rather than duplicating.
|
||||
func (h *SadhnaHandler) GiftToEveryone(w http.ResponseWriter, r *http.Request) {
|
||||
var req giftReq
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil || req.RewardKey == "" {
|
||||
response.Error(w, http.StatusBadRequest, "reward_key is required")
|
||||
return
|
||||
}
|
||||
n, err := h.svc.GiftToEveryone(r.Context(), req.RewardKey)
|
||||
if err != nil {
|
||||
if errors.Is(err, repository.ErrRewardNotFound) {
|
||||
response.Error(w, http.StatusNotFound, "no such reward")
|
||||
return
|
||||
}
|
||||
response.Error(w, http.StatusInternalServerError, "could not send the gift")
|
||||
return
|
||||
}
|
||||
response.JSON(w, http.StatusOK, map[string]int64{"granted": n})
|
||||
}
|
||||
|
||||
func (h *SadhnaHandler) AckRewards(w http.ResponseWriter, r *http.Request) {
|
||||
uid := middleware.UserID(r.Context())
|
||||
if err := h.svc.AckRewards(r.Context(), uid); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user