Files
Go-Web-Template/server/api/v1/system/invite_code.go
2026-04-23 15:29:07 +08:00

64 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package system
import (
"time"
"git.echol.cn/loser/Go-Web-Template/server/model/common/response"
"git.echol.cn/loser/Go-Web-Template/server/utils"
"github.com/gin-gonic/gin"
)
type InviteCodeApi struct{}
type inviteCodeCurrentResponse struct {
HasUnused bool `json:"hasUnused"`
Record interface{} `json:"record,omitempty"`
}
// GenerateInviteCode
// @Tags InviteCode
// @Summary 生成邀请码(同一时间仅允许一个未使用码)
// @Security ApiKeyAuth
// @Produce application/json
// @Success 200 {object} response.Response{data=system.InviteCodeGenerated,msg=string} "生成成功"
// @Router /user/invite-code/generate [post]
func (a *InviteCodeApi) GenerateInviteCode(c *gin.Context) {
uid := utils.GetUserID(c)
expireHours := inviteCodeService.InviteExpireHours()
res, err := inviteCodeService.Generate(uid, expireHours)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
response.OkWithData(res, c)
}
// CurrentInviteCode
// @Tags InviteCode
// @Summary 获取当前未使用邀请码(不返回明文)
// @Security ApiKeyAuth
// @Produce application/json
// @Success 200 {object} response.Response{data=inviteCodeCurrentResponse,msg=string} "获取成功"
// @Router /user/invite-code/current [get]
func (a *InviteCodeApi) CurrentInviteCode(c *gin.Context) {
uid := utils.GetUserID(c)
rec, err := inviteCodeService.GetCurrentUnused(uid)
if err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if rec == nil {
response.OkWithData(inviteCodeCurrentResponse{HasUnused: false}, c)
return
}
// 仅返回必要字段(不返回 hash
payload := map[string]interface{}{
"id": rec.ID,
"codeLast4": rec.CodeLast4,
"status": rec.Status,
"expiresAt": rec.ExpiresAt,
"createdAt": rec.CreatedAt.Format(time.RFC3339),
}
response.OkWithData(inviteCodeCurrentResponse{HasUnused: true, Record: payload}, c)
}