fix: INVITE USER
This commit is contained in:
@@ -20,7 +20,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
[]rest.Middleware{serverCtx.AdminSecretCheck},
|
||||
[]rest.Route{
|
||||
{
|
||||
// 每日钱包签到任务
|
||||
// 给指定邮箱增加待发放奖励
|
||||
Method: http.MethodPost,
|
||||
Path: "/email_reward",
|
||||
Handler: admin.AddEmailRewardHandler(serverCtx),
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"github.com/shopspring/decimal"
|
||||
"nova_task/internal/model"
|
||||
"nova_task/internal/pkg/errs"
|
||||
"strings"
|
||||
|
||||
"nova_task/internal/svc"
|
||||
"nova_task/internal/types"
|
||||
@@ -28,14 +29,18 @@ func NewAddEmailRewardLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Ad
|
||||
}
|
||||
|
||||
func (l *AddEmailRewardLogic) AddEmailReward(req *types.EmailReward) error {
|
||||
_, err := l.svcCtx.EmailRewardModel.Insert(l.ctx, &model.NhEmailReward{
|
||||
Email: req.Email,
|
||||
RewardType: req.RewardType,
|
||||
Value: decimal.NewFromFloat(req.Value),
|
||||
})
|
||||
if err != nil {
|
||||
l.Errorw("add email reward failed", logx.Field("err", err), logx.Field("email", req.Email))
|
||||
return errs.New(errs.ErrDatabaseOperate, err)
|
||||
emails := strings.Split(req.Email, ";")
|
||||
for _, email := range emails {
|
||||
_, err := l.svcCtx.EmailRewardModel.Insert(l.ctx, &model.NhEmailReward{
|
||||
Email: email,
|
||||
RewardType: req.RewardType,
|
||||
Value: decimal.NewFromFloat(req.Value),
|
||||
Remark: req.Remark,
|
||||
})
|
||||
if err != nil {
|
||||
l.Errorw("add email reward failed", logx.Field("err", err), logx.Field("email", req.Email))
|
||||
return errs.New(errs.ErrDatabaseOperate, err)
|
||||
}
|
||||
}
|
||||
|
||||
return errs.Success()
|
||||
|
||||
@@ -35,6 +35,7 @@ func (l *SendEmailRewardLogic) SendEmailReward() error {
|
||||
}
|
||||
|
||||
if len(rewards) <= 0 {
|
||||
l.Infow("no email reward to send")
|
||||
return errs.Success()
|
||||
}
|
||||
|
||||
@@ -66,6 +67,8 @@ func (l *SendEmailRewardLogic) SendEmailReward() error {
|
||||
}
|
||||
if err != nil {
|
||||
l.Errorw("add asset failed", logx.Field("err", err), logx.Field("uid", u.Id), logx.Field("rewardType", rw.RewardType), logx.Field("value", rw.Value))
|
||||
} else {
|
||||
l.Infow("add asset success", logx.Field("uid", u.Id), logx.Field("rewardType", rw.RewardType), logx.Field("value", rw.Value))
|
||||
}
|
||||
_, err = l.svcCtx.TaskAssetRecordModel.Insert(ctx, &model.NhTaskAssetRecord{
|
||||
Uid: int(u.Id),
|
||||
@@ -80,5 +83,5 @@ func (l *SendEmailRewardLogic) SendEmailReward() error {
|
||||
}
|
||||
})
|
||||
|
||||
return nil
|
||||
return errs.Success()
|
||||
}
|
||||
|
||||
@@ -72,6 +72,15 @@ func (l *VerifyTaskResultLogic) VerifyTaskResult(req *types.VerifyTaskResultReq)
|
||||
if tw.TwitterId == "" {
|
||||
return &types.VerifyTaskResultResp{Finish: false}, nil
|
||||
}
|
||||
case model.TASKTYPE_INVITE_USER:
|
||||
count, err := l.svcCtx.PromoteBindModel.UserInviteCount(l.ctx, uint(uid))
|
||||
if err != nil {
|
||||
l.Errorw("get user invite count failed", logx.Field("err", err), logx.Field("uid", uid))
|
||||
return nil, errs.New(errs.ErrDatabaseOperate, err)
|
||||
}
|
||||
if count < cast.ToInt64(task.Param) {
|
||||
return &types.VerifyTaskResultResp{Finish: false}, nil
|
||||
}
|
||||
|
||||
case model.TASKTYPE_BIND_DISCORD:
|
||||
case model.TASKTYPE_DAILY_PAY:
|
||||
|
||||
@@ -16,17 +16,17 @@ func NewAdminSecretCheckMiddleware(conf model.NhSystemConfigModel) *AdminSecretC
|
||||
|
||||
func (m *AdminSecretCheckMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
if key, err := m.conf.GetAdminSecret(r.Context()); err != nil {
|
||||
key, err := m.conf.GetAdminSecret(r.Context())
|
||||
if err != nil {
|
||||
if !errors.Is(err, model.ErrNotFound) {
|
||||
http.Error(w, "system error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
apiKey := r.Header.Get("x-admin-secret")
|
||||
if apiKey != key {
|
||||
http.Error(w, "Invalid API key", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
}
|
||||
apiKey := r.Header.Get("x-admin-secret")
|
||||
if apiKey == "" || apiKey != key {
|
||||
http.Error(w, "Invalid API key", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
next(w, r)
|
||||
}
|
||||
|
||||
@@ -16,17 +16,17 @@ func NewApiKeyCheckMiddleware(conf model.NhSystemConfigModel) *ApiKeyCheckMiddle
|
||||
|
||||
func (m *ApiKeyCheckMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
if key, err := m.conf.GetCarvApiKey(r.Context()); err != nil {
|
||||
key, err := m.conf.GetCarvApiKey(r.Context())
|
||||
if err != nil {
|
||||
if !errors.Is(err, model.ErrNotFound) {
|
||||
http.Error(w, "system error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
apiKey := r.Header.Get("x-api-key")
|
||||
if apiKey != key {
|
||||
http.Error(w, "Invalid API key", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
}
|
||||
apiKey := r.Header.Get("x-api-key")
|
||||
if apiKey == "" || apiKey != key {
|
||||
http.Error(w, "Invalid API key", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
next(w, r)
|
||||
|
||||
@@ -29,7 +29,7 @@ type (
|
||||
)
|
||||
|
||||
func (m *customNhSystemConfigModel) GetAdminSecret(ctx context.Context) (secret string, err error) {
|
||||
cf, err := m.FindOneByName(ctx, consts.CarvApiKey)
|
||||
cf, err := m.FindOneByName(ctx, consts.AdminSecret)
|
||||
if err != nil {
|
||||
if !errors.Is(err, sqlx.ErrNotFound) {
|
||||
return "", err
|
||||
|
||||
@@ -19,13 +19,14 @@ type Community struct {
|
||||
|
||||
type EmailKey struct {
|
||||
Email string `form:"email"`
|
||||
ApiKey string `Header:"x-api-key"`
|
||||
ApiKey string `header:"x-api-key"`
|
||||
}
|
||||
|
||||
type EmailReward struct {
|
||||
Email string `json:"email"`
|
||||
RewardType string `json:"reward_type"`
|
||||
Value float64 `json:"value"`
|
||||
Email string `json:"email"` // 邮箱,多个邮箱分号隔开
|
||||
RewardType string `json:"reward_type"` // 奖励类型: points, elite_points, castile, keys
|
||||
Value float64 `json:"value"` // 数量
|
||||
Remark string `json:"remark"` // 备注
|
||||
}
|
||||
|
||||
type Error struct {
|
||||
@@ -101,7 +102,7 @@ type UnStakeNftReq struct {
|
||||
type UnlockChapterReq struct {
|
||||
Email string `form:"email"`
|
||||
Chapter int `form:"chapter"`
|
||||
ApiKey string `Header:"x-api-key"`
|
||||
ApiKey string `header:"x-api-key"`
|
||||
}
|
||||
|
||||
type UserNft struct {
|
||||
|
||||
Reference in New Issue
Block a user