mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-07-12 07:41:06 +08:00
177 lines
4.1 KiB
Go
177 lines
4.1 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"redpacket/internal/authctx"
|
|
"redpacket/internal/service"
|
|
"redpacket/pkg/resp"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type RedPacketHandler struct {
|
|
rpSvc *service.RedPacketService
|
|
}
|
|
|
|
func NewRedPacketHandler(rpSvc *service.RedPacketService) *RedPacketHandler {
|
|
return &RedPacketHandler{rpSvc: rpSvc}
|
|
}
|
|
|
|
func (h *RedPacketHandler) CreateOrder(c *gin.Context) {
|
|
if err := authctx.BindCurrentUserID(c); err != nil {
|
|
resp.Forbidden(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var req service.CreateOrderRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
result, err := h.rpSvc.CreateOrder(c.Request.Context(), &req)
|
|
if err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, result)
|
|
}
|
|
|
|
func (h *RedPacketHandler) CreatedCallback(c *gin.Context) {
|
|
var req service.CreatedCallbackRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
if err := h.rpSvc.CreatedCallback(c.Request.Context(), &req); err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, gin.H{"ok": true})
|
|
}
|
|
|
|
func (h *RedPacketHandler) Detail(c *gin.Context) {
|
|
packetID := c.Query("packet_id")
|
|
if packetID == "" {
|
|
resp.BadRequest(c, "packet_id is required")
|
|
return
|
|
}
|
|
|
|
detail, err := h.rpSvc.GetDetail(c.Request.Context(), packetID)
|
|
if err != nil {
|
|
resp.Fail(c, http.StatusNotFound, 404, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, detail)
|
|
}
|
|
|
|
func (h *RedPacketHandler) ClaimSign(c *gin.Context) {
|
|
if err := authctx.BindCurrentUserID(c); err != nil {
|
|
resp.Forbidden(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var req struct {
|
|
PacketID string `json:"packet_id" binding:"required"`
|
|
Claimer string `json:"claimer" binding:"required"`
|
|
RandomSeed string `json:"random_seed"`
|
|
}
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
result, err := h.rpSvc.IssueClaimSign(c.Request.Context(), req.PacketID, req.Claimer, req.RandomSeed)
|
|
if err != nil {
|
|
resp.InternalError(c, "failed to issue claim signature: "+err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, result)
|
|
}
|
|
|
|
func (h *RedPacketHandler) ClaimResult(c *gin.Context) {
|
|
if err := authctx.BindCurrentUserID(c); err != nil {
|
|
resp.Forbidden(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var req service.ClaimResultRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
if err := h.rpSvc.ClaimResult(c.Request.Context(), &req); err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, gin.H{"ok": true})
|
|
}
|
|
|
|
func (h *RedPacketHandler) WalletBindChallenge(c *gin.Context) {
|
|
if err := authctx.BindCurrentUserID(c); err != nil {
|
|
resp.Forbidden(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var req service.WalletBindChallengeRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
result, err := h.rpSvc.IssueWalletBindChallenge(c.Request.Context(), &req)
|
|
if err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, result)
|
|
}
|
|
|
|
func (h *RedPacketHandler) WalletBindConfirm(c *gin.Context) {
|
|
var req service.WalletBindConfirmRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.BadRequest(c, "invalid request body: "+err.Error())
|
|
return
|
|
}
|
|
|
|
result, err := h.rpSvc.ConfirmWalletBind(c.Request.Context(), &req)
|
|
if err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, 400, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, result)
|
|
}
|
|
|
|
func (h *RedPacketHandler) WalletBindDetail(c *gin.Context) {
|
|
if err := authctx.BindCurrentUserID(c); err != nil {
|
|
resp.Forbidden(c, err.Error())
|
|
return
|
|
}
|
|
|
|
chainType := c.Query("chain_type")
|
|
walletAddress := c.Query("wallet_address")
|
|
if chainType == "" || walletAddress == "" {
|
|
resp.BadRequest(c, "chain_type and wallet_address are required")
|
|
return
|
|
}
|
|
|
|
result, err := h.rpSvc.GetWalletBinding(c.Request.Context(), "", chainType, walletAddress)
|
|
if err != nil {
|
|
resp.Fail(c, http.StatusNotFound, 404, err.Error())
|
|
return
|
|
}
|
|
|
|
resp.OK(c, result)
|
|
}
|