特朗普头像任务
This commit is contained in:
@@ -26,7 +26,7 @@ service novatask {
|
|||||||
|
|
||||||
@doc "领取任务奖励"
|
@doc "领取任务奖励"
|
||||||
@handler GetTaskReward
|
@handler GetTaskReward
|
||||||
get /reward/:id (TaskIdPath) returns (GetTaskRewardResp)
|
get /reward (GetTaskRewardReq) returns (GetTaskRewardResp)
|
||||||
|
|
||||||
@doc "拉取玩家持有的nft列表"
|
@doc "拉取玩家持有的nft列表"
|
||||||
@handler GetNftList
|
@handler GetNftList
|
||||||
@@ -81,8 +81,9 @@ type VerifyTaskResultReq {
|
|||||||
Params string `form:"params,optional"` // 额外的参数
|
Params string `form:"params,optional"` // 额外的参数
|
||||||
}
|
}
|
||||||
|
|
||||||
type TaskIdPath {
|
type GetTaskRewardReq {
|
||||||
ID uint `path:"id"` // 任务ID
|
ID uint `form:"id"` // 任务ID
|
||||||
|
RoleId int64 `form:"role_id,optional"` // 游戏角色ID
|
||||||
}
|
}
|
||||||
|
|
||||||
type VerifyTaskResultResp {
|
type VerifyTaskResultResp {
|
||||||
|
|||||||
@@ -571,7 +571,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"/gapi/task/v1/reward/{id}": {
|
"/gapi/task/v1/reward": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "领取任务奖励",
|
"summary": "领取任务奖励",
|
||||||
"operationId": "GetTaskReward",
|
"operationId": "GetTaskReward",
|
||||||
@@ -586,14 +586,27 @@
|
|||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"name": "id",
|
"name": "id",
|
||||||
"in": "path",
|
"description": " 任务ID",
|
||||||
|
"in": "query",
|
||||||
"required": true,
|
"required": true,
|
||||||
"type": "string"
|
"type": "integer",
|
||||||
|
"format": "uint32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "role_id",
|
||||||
|
"description": " 游戏角色ID",
|
||||||
|
"in": "query",
|
||||||
|
"required": false,
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
"task"
|
"task"
|
||||||
],
|
],
|
||||||
|
"consumes": [
|
||||||
|
"multipart/form-data"
|
||||||
|
],
|
||||||
"security": [
|
"security": [
|
||||||
{
|
{
|
||||||
"apiKey": []
|
"apiKey": []
|
||||||
@@ -930,6 +943,25 @@
|
|||||||
"tasks"
|
"tasks"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"GetTaskRewardReq": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint32",
|
||||||
|
"description": " 任务ID"
|
||||||
|
},
|
||||||
|
"role_id": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"description": " 游戏角色ID"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": "GetTaskRewardReq",
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
]
|
||||||
|
},
|
||||||
"GetTaskRewardResp": {
|
"GetTaskRewardResp": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -1272,10 +1304,6 @@
|
|||||||
"finish_state"
|
"finish_state"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"TaskIdPath": {
|
|
||||||
"type": "object",
|
|
||||||
"title": "TaskIdPath"
|
|
||||||
},
|
|
||||||
"UnStakeNftReq": {
|
"UnStakeNftReq": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
@@ -22,4 +22,24 @@ const (
|
|||||||
AssetType_Keys AssetType = "keys"
|
AssetType_Keys AssetType = "keys"
|
||||||
AssetType_Castile AssetType = "castile"
|
AssetType_Castile AssetType = "castile"
|
||||||
AssetType_Elite_Points AssetType = "elite_points"
|
AssetType_Elite_Points AssetType = "elite_points"
|
||||||
|
AssetType_Property AssetType = "property"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
RewardTypePoints = 0 // 积分
|
||||||
|
RewardTypeProperty = 1 // 道具
|
||||||
|
RewardCastile = 2 // 代币
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetAssetType(rewardType int8) AssetType {
|
||||||
|
switch rewardType {
|
||||||
|
case RewardTypePoints:
|
||||||
|
return AssetType_Points
|
||||||
|
case RewardTypeProperty:
|
||||||
|
return AssetType_Property
|
||||||
|
case RewardCastile:
|
||||||
|
return AssetType_Castile
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
{
|
{
|
||||||
// 领取任务奖励
|
// 领取任务奖励
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/reward/:id",
|
Path: "/reward",
|
||||||
Handler: task.GetTaskRewardHandler(serverCtx),
|
Handler: task.GetTaskRewardHandler(serverCtx),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
// 领取任务奖励
|
// 领取任务奖励
|
||||||
func GetTaskRewardHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
func GetTaskRewardHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
var req types.TaskIdPath
|
var req types.GetTaskRewardReq
|
||||||
if err := httpx.Parse(r, &req); err != nil {
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
httpx.ErrorCtx(r.Context(), w, err)
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ func (l *SendEmailRewardLogic) SendEmailReward() error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
err = l.svcCtx.AddUserAsset(ctx, u.Id, consts.AssetType(rw.RewardType), rw.Value, rw.Remark, 0, 0, false)
|
err = l.svcCtx.AddUserAsset(ctx, u.Id, 0, consts.AssetType(rw.RewardType), "", rw.Value, rw.Remark, 0, 0, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Errorw("insert task asset record failed", logx.Field("err", err), logx.Field("uid", u.Id), logx.Field("rewardType", rw.RewardType), logx.Field("value", rw.Value))
|
l.Errorw("insert task asset record failed", logx.Field("err", err), logx.Field("uid", u.Id), logx.Field("rewardType", rw.RewardType), logx.Field("value", rw.Value))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ func (l *StakeSettleLogic) StakeSettle(date string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 加资产
|
// 加资产
|
||||||
err = l.svcCtx.AddUserAssetWithSession(l.ctx, session, uid, consts.AssetType_Castile, reward, "nft软质押奖励", 0, 0, false)
|
err = l.svcCtx.AddUserAssetWithSession(l.ctx, session, uid, 0, consts.AssetType_Castile, "", reward, "nft软质押奖励", 0, 0, false)
|
||||||
return err
|
return err
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*typ
|
|||||||
totalCount = cast.ToInt(t.Param)
|
totalCount = cast.ToInt(t.Param)
|
||||||
}
|
}
|
||||||
|
|
||||||
resp.Tasks = append(resp.Tasks, types.Task{
|
tks := types.Task{
|
||||||
Id: t.Id,
|
Id: t.Id,
|
||||||
Title: t.Title,
|
Title: t.Title,
|
||||||
SubTitle: t.SubTitle,
|
SubTitle: t.SubTitle,
|
||||||
@@ -60,7 +60,12 @@ func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*typ
|
|||||||
HasFinishCount: 0,
|
HasFinishCount: 0,
|
||||||
TotalCount: totalCount,
|
TotalCount: totalCount,
|
||||||
FinishState: model.TASK_PROGRESS_NOT_FINISHED,
|
FinishState: model.TASK_PROGRESS_NOT_FINISHED,
|
||||||
})
|
}
|
||||||
|
if tks.Type == model.TASKTYPE_TRUMP_HEAD {
|
||||||
|
tks.Params = t.PropertyId
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Tasks = append(resp.Tasks, tks)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@@ -91,7 +96,7 @@ func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*typ
|
|||||||
// 计算任务完成数量以及总数
|
// 计算任务完成数量以及总数
|
||||||
hasFinishCount := 0
|
hasFinishCount := 0
|
||||||
totalCount := 1
|
totalCount := 1
|
||||||
|
param := t.Param
|
||||||
if finishState >= model.TASK_PROGRESS_WAIT_REWARD {
|
if finishState >= model.TASK_PROGRESS_WAIT_REWARD {
|
||||||
// 如果任务状态为待领取奖励, 完成数量等于总数量
|
// 如果任务状态为待领取奖励, 完成数量等于总数量
|
||||||
hasFinishCount = totalCount
|
hasFinishCount = totalCount
|
||||||
@@ -126,6 +131,9 @@ func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*typ
|
|||||||
if hasBindTwitter == 1 {
|
if hasBindTwitter == 1 {
|
||||||
hasFinishCount = 1
|
hasFinishCount = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case model.TASKTYPE_TRUMP_HEAD:
|
||||||
|
param = t.PropertyId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +154,7 @@ func (l *GetTaskListLogic) GetTaskList(uid int, req *types.GetTaskListReq) (*typ
|
|||||||
Description: t.Description,
|
Description: t.Description,
|
||||||
Points: t.Points,
|
Points: t.Points,
|
||||||
ButtonText: t.ButtonText,
|
ButtonText: t.ButtonText,
|
||||||
Params: t.Param,
|
Params: param,
|
||||||
Type: t.Type,
|
Type: t.Type,
|
||||||
Url: t.Url,
|
Url: t.Url,
|
||||||
StartAt: t.StartAt.Time.Format(time.DateTime),
|
StartAt: t.StartAt.Time.Format(time.DateTime),
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ func NewGetTaskRewardLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Get
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *GetTaskRewardLogic) GetTaskReward(req *types.TaskIdPath) (*types.GetTaskRewardResp, error) {
|
func (l *GetTaskRewardLogic) GetTaskReward(req *types.GetTaskRewardReq) (*types.GetTaskRewardResp, error) {
|
||||||
//uid := cast.ToStringMapInt(l.ctx.Value("data"))["id"]
|
//uid := cast.ToStringMapInt(l.ctx.Value("data"))["id"]
|
||||||
uid := utils.GetUid(l.ctx)
|
uid := utils.GetUid(l.ctx)
|
||||||
task, err := l.svcCtx.TaskModel.FindOne(l.ctx, req.ID)
|
task, err := l.svcCtx.TaskModel.FindOne(l.ctx, req.ID)
|
||||||
@@ -43,6 +43,22 @@ func (l *GetTaskRewardLogic) GetTaskReward(req *types.TaskIdPath) (*types.GetTas
|
|||||||
}
|
}
|
||||||
return nil, errs.New(errs.ErrDatabaseOperate, err)
|
return nil, errs.New(errs.ErrDatabaseOperate, err)
|
||||||
}
|
}
|
||||||
|
if task.Type == model.TASKTYPE_TRUMP_HEAD {
|
||||||
|
if req.RoleId == 0 {
|
||||||
|
return nil, errs.New(errs.ErrInvalidParam, "Must select role")
|
||||||
|
}
|
||||||
|
roleUid, err := l.svcCtx.RoleModel.FindRoleUserId(l.ctx, req.RoleId)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, model.ErrNotFound) {
|
||||||
|
return nil, errs.New(errs.ErrRoleNotFound, "role not found")
|
||||||
|
}
|
||||||
|
return nil, errs.New(errs.ErrDatabaseOperate, err)
|
||||||
|
}
|
||||||
|
if roleUid != uint(uid) {
|
||||||
|
return nil, errs.New(errs.ErrRoleNotFound, "role not found")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var taskSeq int
|
var taskSeq int
|
||||||
if task.Type == model.TASKTYPE_DAILY_PAY || task.Type == model.TASKTYPE_AMBASSADOR_TASK {
|
if task.Type == model.TASKTYPE_DAILY_PAY || task.Type == model.TASKTYPE_AMBASSADOR_TASK {
|
||||||
taskSeq = cast.ToInt(time.Now().Format("20060102"))
|
taskSeq = cast.ToInt(time.Now().Format("20060102"))
|
||||||
@@ -62,6 +78,7 @@ func (l *GetTaskRewardLogic) GetTaskReward(req *types.TaskIdPath) (*types.GetTas
|
|||||||
return nil, errs.New(errs.ErrTaskAlreadyReward, "task already reward")
|
return nil, errs.New(errs.ErrTaskAlreadyReward, "task already reward")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assetType := consts.GetAssetType(task.RewardType)
|
||||||
// 修改状态,增加积分和记录都在事物中执行
|
// 修改状态,增加积分和记录都在事物中执行
|
||||||
err = l.svcCtx.DBConn.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
err = l.svcCtx.DBConn.TransactCtx(l.ctx, func(ctx context.Context, session sqlx.Session) error {
|
||||||
// 修改状态
|
// 修改状态
|
||||||
@@ -70,8 +87,9 @@ func (l *GetTaskRewardLogic) GetTaskReward(req *types.TaskIdPath) (*types.GetTas
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 给予用户奖励
|
// 给予用户奖励
|
||||||
err = l.svcCtx.AddUserAssetWithSession(l.ctx, session, uint(uid), consts.AssetType_Points, decimal.NewFromInt(int64(task.Points)), "完成任务:"+task.Title, uint64(task.Id), 0, true)
|
err = l.svcCtx.AddUserAssetWithSession(l.ctx, session, uint(uid), req.RoleId, assetType, task.PropertyId, decimal.NewFromInt(int64(task.Points)), "完成任务:"+task.Title, uint64(task.Id), 0, assetType == consts.AssetType_Points)
|
||||||
//err = l.svcCtx.TaskAssetModel.WithSession(session).AddPoint(l.ctx, uint(uid), decimal.NewFromInt(int64(task.Points)))
|
//err = l.svcCtx.TaskAssetModel.WithSession(session).AddPoint(l.ctx, uint(uid), decimal.NewFromInt(int64(task.Points)))
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
// return err
|
// return err
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ func (l *VerifyTaskResultLogic) VerifyTaskResult(req *types.VerifyTaskResultReq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case model.TASKTYPE_BIND_DISCORD:
|
case model.TASKTYPE_BIND_DISCORD:
|
||||||
case model.TASKTYPE_DAILY_PAY:
|
case model.TASKTYPE_DAILY_PAY, model.TASKTYPE_TRUMP_HEAD:
|
||||||
if req.Params == "" {
|
if req.Params == "" {
|
||||||
return &types.VerifyTaskResultResp{Finish: false}, nil
|
return &types.VerifyTaskResultResp{Finish: false}, nil
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
29
internal/model/nh_games_property_logs_model.go
Executable file
29
internal/model/nh_games_property_logs_model.go
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
|
||||||
|
var _ NhGamesPropertyLogsModel = (*customNhGamesPropertyLogsModel)(nil)
|
||||||
|
|
||||||
|
type (
|
||||||
|
// NhGamesPropertyLogsModel is an interface to be customized, add more methods here,
|
||||||
|
// and implement the added methods in customNhGamesPropertyLogsModel.
|
||||||
|
NhGamesPropertyLogsModel interface {
|
||||||
|
nhGamesPropertyLogsModel
|
||||||
|
WithSession(session sqlx.Session) NhGamesPropertyLogsModel
|
||||||
|
}
|
||||||
|
|
||||||
|
customNhGamesPropertyLogsModel struct {
|
||||||
|
*defaultNhGamesPropertyLogsModel
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewNhGamesPropertyLogsModel returns a model for the database table.
|
||||||
|
func NewNhGamesPropertyLogsModel(conn sqlx.SqlConn) NhGamesPropertyLogsModel {
|
||||||
|
return &customNhGamesPropertyLogsModel{
|
||||||
|
defaultNhGamesPropertyLogsModel: newNhGamesPropertyLogsModel(conn),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *customNhGamesPropertyLogsModel) WithSession(session sqlx.Session) NhGamesPropertyLogsModel {
|
||||||
|
return NewNhGamesPropertyLogsModel(sqlx.NewSqlConnFromSession(session))
|
||||||
|
}
|
||||||
96
internal/model/nh_games_property_logs_model_gen.go
Executable file
96
internal/model/nh_games_property_logs_model_gen.go
Executable file
@@ -0,0 +1,96 @@
|
|||||||
|
// Code generated by goctl. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// goctl version: 1.7.3
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
"github.com/zeromicro/go-zero/core/stringx"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
nhGamesPropertyLogsFieldNames = builder.RawFieldNames(&NhGamesPropertyLogs{})
|
||||||
|
nhGamesPropertyLogsRows = strings.Join(nhGamesPropertyLogsFieldNames, ",")
|
||||||
|
nhGamesPropertyLogsRowsExpectAutoSet = strings.Join(stringx.Remove(nhGamesPropertyLogsFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
|
||||||
|
nhGamesPropertyLogsRowsWithPlaceHolder = strings.Join(stringx.Remove(nhGamesPropertyLogsFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
nhGamesPropertyLogsModel interface {
|
||||||
|
Insert(ctx context.Context, data *NhGamesPropertyLogs) (sql.Result, error)
|
||||||
|
FindOne(ctx context.Context, id uint) (*NhGamesPropertyLogs, error)
|
||||||
|
Update(ctx context.Context, data *NhGamesPropertyLogs) error
|
||||||
|
Delete(ctx context.Context, id uint) error
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultNhGamesPropertyLogsModel struct {
|
||||||
|
conn sqlx.SqlConn
|
||||||
|
table string
|
||||||
|
}
|
||||||
|
|
||||||
|
NhGamesPropertyLogs struct {
|
||||||
|
Id uint `db:"id"`
|
||||||
|
Uid uint `db:"uid"` // 用户ID
|
||||||
|
RoleId int64 `db:"role_id"` // 角色id
|
||||||
|
PropertyId string `db:"property_id"` // 道具ID
|
||||||
|
PropertyNum uint `db:"property_num"` // 道具数量
|
||||||
|
Scene uint `db:"scene"` // 场景:1=积分活动
|
||||||
|
CallbackStatus int8 `db:"callback_status"` // 下发通知状态:0未通知,1已通知,2通知异常
|
||||||
|
CallbackNum int `db:"callback_num"` // 交易成功发送通知次数
|
||||||
|
CallbackAt sql.NullTime `db:"callback_at"` // 发送通知最新时间
|
||||||
|
CallbackRemark string `db:"callback_remark"` // 通知回调备注
|
||||||
|
CreatedAt time.Time `db:"created_at"` // 创建时间
|
||||||
|
UpdatedAt time.Time `db:"updated_at"` // 修改时间
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func newNhGamesPropertyLogsModel(conn sqlx.SqlConn) *defaultNhGamesPropertyLogsModel {
|
||||||
|
return &defaultNhGamesPropertyLogsModel{
|
||||||
|
conn: conn,
|
||||||
|
table: "`nh_games_property_logs`",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultNhGamesPropertyLogsModel) Delete(ctx context.Context, id uint) error {
|
||||||
|
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||||
|
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultNhGamesPropertyLogsModel) FindOne(ctx context.Context, id uint) (*NhGamesPropertyLogs, error) {
|
||||||
|
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", nhGamesPropertyLogsRows, m.table)
|
||||||
|
var resp NhGamesPropertyLogs
|
||||||
|
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||||
|
switch err {
|
||||||
|
case nil:
|
||||||
|
return &resp, nil
|
||||||
|
case sqlx.ErrNotFound:
|
||||||
|
return nil, ErrNotFound
|
||||||
|
default:
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultNhGamesPropertyLogsModel) Insert(ctx context.Context, data *NhGamesPropertyLogs) (sql.Result, error) {
|
||||||
|
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, nhGamesPropertyLogsRowsExpectAutoSet)
|
||||||
|
ret, err := m.conn.ExecCtx(ctx, query, data.Uid, data.RoleId, data.PropertyId, data.PropertyNum, data.Scene, data.CallbackStatus, data.CallbackNum, data.CallbackAt, data.CallbackRemark)
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultNhGamesPropertyLogsModel) Update(ctx context.Context, data *NhGamesPropertyLogs) error {
|
||||||
|
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhGamesPropertyLogsRowsWithPlaceHolder)
|
||||||
|
_, err := m.conn.ExecCtx(ctx, query, data.Uid, data.RoleId, data.PropertyId, data.PropertyNum, data.Scene, data.CallbackStatus, data.CallbackNum, data.CallbackAt, data.CallbackRemark, data.Id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultNhGamesPropertyLogsModel) tableName() string {
|
||||||
|
return m.table
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ type (
|
|||||||
nhRoleModel
|
nhRoleModel
|
||||||
withSession(session sqlx.Session) NhRoleModel
|
withSession(session sqlx.Session) NhRoleModel
|
||||||
AccountExist(ctx context.Context, account string) (bool, error)
|
AccountExist(ctx context.Context, account string) (bool, error)
|
||||||
|
FindRoleUserId(ctx context.Context, roleId int64) (uint, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
customNhRoleModel struct {
|
customNhRoleModel struct {
|
||||||
@@ -23,6 +24,20 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (m *customNhRoleModel) FindRoleUserId(ctx context.Context, roleId int64) (uint, error) {
|
||||||
|
query := fmt.Sprintf("SELECT u.id FROM `nh_user` u JOIN %s r ON u.email = r.account WHERE r.role_id = ?", m.table)
|
||||||
|
var resp uint
|
||||||
|
err := m.conn.QueryRowPartialCtx(ctx, &resp, query, roleId)
|
||||||
|
switch {
|
||||||
|
case err == nil:
|
||||||
|
return resp, nil
|
||||||
|
case errors.Is(err, sqlx.ErrNotFound):
|
||||||
|
return 0, nil
|
||||||
|
default:
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m *customNhRoleModel) AccountExist(ctx context.Context, account string) (bool, error) {
|
func (m *customNhRoleModel) AccountExist(ctx context.Context, account string) (bool, error) {
|
||||||
query := fmt.Sprintf("select count(*) as `count` from %s where `account` = ?", m.table)
|
query := fmt.Sprintf("select count(*) as `count` from %s where `account` = ?", m.table)
|
||||||
var count int64
|
var count int64
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const (
|
|||||||
TASKTYPE_DAILY_PAY = 9 // 每日支出任务
|
TASKTYPE_DAILY_PAY = 9 // 每日支出任务
|
||||||
TASKTYPE_INVITE_USER = 10 // 邀请任务
|
TASKTYPE_INVITE_USER = 10 // 邀请任务
|
||||||
TASKTYPE_AMBASSADOR_TASK = 11 // 大使任务
|
TASKTYPE_AMBASSADOR_TASK = 11 // 大使任务
|
||||||
|
TASKTYPE_TRUMP_HEAD = 12 // trump_head
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ type (
|
|||||||
UpdatedAt time.Time `db:"updated_at"` // 修改时间
|
UpdatedAt time.Time `db:"updated_at"` // 修改时间
|
||||||
Param string `db:"param"` // 备用参数,如果是邀请任务,可以填邀请的人数
|
Param string `db:"param"` // 备用参数,如果是邀请任务,可以填邀请的人数
|
||||||
Sort int `db:"sort"` // 数字越小越靠前
|
Sort int `db:"sort"` // 数字越小越靠前
|
||||||
|
PropertyId string `db:"property_id"` // 道具ID
|
||||||
|
RewardType int8 `db:"reward_type"` // 奖励类型:0=积分,1=道具,2=castile
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -84,14 +86,14 @@ func (m *defaultNhTaskModel) FindOne(ctx context.Context, id uint) (*NhTask, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *defaultNhTaskModel) Insert(ctx context.Context, data *NhTask) (sql.Result, error) {
|
func (m *defaultNhTaskModel) Insert(ctx context.Context, data *NhTask) (sql.Result, error) {
|
||||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, nhTaskRowsExpectAutoSet)
|
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, nhTaskRowsExpectAutoSet)
|
||||||
ret, err := m.conn.ExecCtx(ctx, query, data.CommunityId, data.Title, data.SubTitle, data.Description, data.Points, data.ButtonText, data.Type, data.Url, data.Status, data.StartAt, data.EndAt, data.Param, data.Sort)
|
ret, err := m.conn.ExecCtx(ctx, query, data.CommunityId, data.Title, data.SubTitle, data.Description, data.Points, data.ButtonText, data.Type, data.Url, data.Status, data.StartAt, data.EndAt, data.Param, data.Sort, data.PropertyId, data.RewardType)
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *defaultNhTaskModel) Update(ctx context.Context, data *NhTask) error {
|
func (m *defaultNhTaskModel) Update(ctx context.Context, data *NhTask) error {
|
||||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhTaskRowsWithPlaceHolder)
|
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, nhTaskRowsWithPlaceHolder)
|
||||||
_, err := m.conn.ExecCtx(ctx, query, data.CommunityId, data.Title, data.SubTitle, data.Description, data.Points, data.ButtonText, data.Type, data.Url, data.Status, data.StartAt, data.EndAt, data.Param, data.Sort, data.Id)
|
_, err := m.conn.ExecCtx(ctx, query, data.CommunityId, data.Title, data.SubTitle, data.Description, data.Points, data.ButtonText, data.Type, data.Url, data.Status, data.StartAt, data.EndAt, data.Param, data.Sort, data.PropertyId, data.RewardType, data.Id)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,4 +28,6 @@ const (
|
|||||||
ErrUserNotFound Reason = 20007 // 用户不存在
|
ErrUserNotFound Reason = 20007 // 用户不存在
|
||||||
ErrNftNotBelongToUser Reason = 20008 // NFT不属于用户
|
ErrNftNotBelongToUser Reason = 20008 // NFT不属于用户
|
||||||
ErrInvalidApiKey Reason = 20009 // 无效的api key
|
ErrInvalidApiKey Reason = 20009 // 无效的api key
|
||||||
|
ErrRoleNotFound Reason = 20010 // 角色不存在
|
||||||
|
ErrInvalidParam Reason = 20011 // 无效的参数
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ type ServiceContext struct {
|
|||||||
AmbassadorModel model.NhTaskAmbassadorModel
|
AmbassadorModel model.NhTaskAmbassadorModel
|
||||||
GameReportModel model.NhGameReportModel
|
GameReportModel model.NhGameReportModel
|
||||||
RoleModel model.NhRoleModel
|
RoleModel model.NhRoleModel
|
||||||
|
GamesPropertyModel model.NhGamesPropertyLogsModel
|
||||||
|
|
||||||
ApiKeyCheck rest.Middleware
|
ApiKeyCheck rest.Middleware
|
||||||
AdminSecretCheck rest.Middleware
|
AdminSecretCheck rest.Middleware
|
||||||
@@ -84,6 +85,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
|||||||
AmbassadorModel: model.NewNhTaskAmbassadorModel(dbConn),
|
AmbassadorModel: model.NewNhTaskAmbassadorModel(dbConn),
|
||||||
GameReportModel: model.NewNhGameReportModel(dbConn),
|
GameReportModel: model.NewNhGameReportModel(dbConn),
|
||||||
RoleModel: model.NewNhRoleModel(dbConn),
|
RoleModel: model.NewNhRoleModel(dbConn),
|
||||||
|
GamesPropertyModel: model.NewNhGamesPropertyLogsModel(dbConn),
|
||||||
|
|
||||||
ApiKeyCheck: middleware.NewApiKeyCheckMiddleware(configModel).Handle,
|
ApiKeyCheck: middleware.NewApiKeyCheckMiddleware(configModel).Handle,
|
||||||
AdminSecretCheck: middleware.NewAdminSecretCheckMiddleware(configModel).Handle,
|
AdminSecretCheck: middleware.NewAdminSecretCheckMiddleware(configModel).Handle,
|
||||||
@@ -154,15 +156,18 @@ func (s *ServiceContext) GetUidByEmail(ctx context.Context, email string) (uint,
|
|||||||
return u.Id, nil
|
return u.Id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ServiceContext) AddUserAssetWithSession(ctx context.Context, session sqlx.Session, uid uint, asset consts.AssetType, amount decimal.Decimal, remark string, eventId uint64, provideUid uint, referralReward bool) error {
|
func (s *ServiceContext) AddUserAssetWithSession(ctx context.Context, session sqlx.Session, uid uint, role int64, asset consts.AssetType, assetId string, amount decimal.Decimal, remark string, eventId uint64, provideUid uint, referralReward bool) error {
|
||||||
var assetModel model.NhTaskAssetModel
|
var assetModel model.NhTaskAssetModel
|
||||||
var recordModel model.NhTaskAssetRecordModel
|
var recordModel model.NhTaskAssetRecordModel
|
||||||
|
var gamesPropertyModel model.NhGamesPropertyLogsModel
|
||||||
if session != nil {
|
if session != nil {
|
||||||
assetModel = s.taskAssetModel.WithSession(session)
|
assetModel = s.taskAssetModel.WithSession(session)
|
||||||
recordModel = s.taskAssetRecordModel.WithSession(session)
|
recordModel = s.taskAssetRecordModel.WithSession(session)
|
||||||
|
gamesPropertyModel = s.GamesPropertyModel.WithSession(session)
|
||||||
} else {
|
} else {
|
||||||
assetModel = s.taskAssetModel
|
assetModel = s.taskAssetModel
|
||||||
recordModel = s.taskAssetRecordModel
|
recordModel = s.taskAssetRecordModel
|
||||||
|
gamesPropertyModel = s.GamesPropertyModel
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
switch asset {
|
switch asset {
|
||||||
@@ -174,6 +179,14 @@ func (s *ServiceContext) AddUserAssetWithSession(ctx context.Context, session sq
|
|||||||
err = assetModel.AddElitePoints(ctx, uid, amount)
|
err = assetModel.AddElitePoints(ctx, uid, amount)
|
||||||
case consts.AssetType_Keys:
|
case consts.AssetType_Keys:
|
||||||
err = assetModel.AddKeys(ctx, uid, int(amount.IntPart()))
|
err = assetModel.AddKeys(ctx, uid, int(amount.IntPart()))
|
||||||
|
case consts.AssetType_Property:
|
||||||
|
_, err = gamesPropertyModel.Insert(ctx, &model.NhGamesPropertyLogs{
|
||||||
|
Uid: uid,
|
||||||
|
RoleId: int64(role),
|
||||||
|
PropertyId: assetId,
|
||||||
|
PropertyNum: uint(amount.IntPart()),
|
||||||
|
})
|
||||||
|
return err
|
||||||
default:
|
default:
|
||||||
return errors.New("unknown asset type")
|
return errors.New("unknown asset type")
|
||||||
}
|
}
|
||||||
@@ -214,9 +227,9 @@ func (s *ServiceContext) AddUserAssetWithSession(ctx context.Context, session sq
|
|||||||
}
|
}
|
||||||
rated := decimal.NewFromFloat(float64(rate) / 100)
|
rated := decimal.NewFromFloat(float64(rate) / 100)
|
||||||
rewardAmount := amount.Mul(rated)
|
rewardAmount := amount.Mul(rated)
|
||||||
return s.AddUserAssetWithSession(ctx, session, pb.ShareUid, asset, rewardAmount, fmt.Sprintf("分享返利,比例%s", rated.String()), 7, uid, false)
|
return s.AddUserAssetWithSession(ctx, session, pb.ShareUid, 0, asset, assetId, rewardAmount, fmt.Sprintf("分享返利,比例%s", rated.String()), 7, uid, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *ServiceContext) AddUserAsset(ctx context.Context, uid uint, asset consts.AssetType, amount decimal.Decimal, remark string, eventId uint64, provideUid uint, referralReward bool) error {
|
func (s *ServiceContext) AddUserAsset(ctx context.Context, uid uint, role int64, asset consts.AssetType, assetId string, amount decimal.Decimal, remark string, eventId uint64, provideUid uint, referralReward bool) error {
|
||||||
return s.AddUserAssetWithSession(ctx, nil, uid, asset, amount, remark, eventId, provideUid, referralReward)
|
return s.AddUserAssetWithSession(ctx, nil, uid, role, asset, assetId, amount, remark, eventId, provideUid, referralReward)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,11 @@ type GetTaskListResp struct {
|
|||||||
Tasks []Task `json:"tasks"`
|
Tasks []Task `json:"tasks"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetTaskRewardReq struct {
|
||||||
|
ID uint `form:"id"` // 任务ID
|
||||||
|
RoleId int64 `form:"role_id,optional"` // 游戏角色ID
|
||||||
|
}
|
||||||
|
|
||||||
type GetTaskRewardResp struct {
|
type GetTaskRewardResp struct {
|
||||||
Points int `json:"points"` // 积分
|
Points int `json:"points"` // 积分
|
||||||
}
|
}
|
||||||
@@ -151,10 +156,6 @@ type Task struct {
|
|||||||
FinishState int8 `json:"finish_state"` // 0:未完成 1:待校验 2:已完成未领取 3:已领取 4:不可参与
|
FinishState int8 `json:"finish_state"` // 0:未完成 1:待校验 2:已完成未领取 3:已领取 4:不可参与
|
||||||
}
|
}
|
||||||
|
|
||||||
type TaskIdPath struct {
|
|
||||||
ID uint `path:"id"` // 任务ID
|
|
||||||
}
|
|
||||||
|
|
||||||
type UnStakeNftReq struct {
|
type UnStakeNftReq struct {
|
||||||
TokenId string `json:"token_id"` // nftID
|
TokenId string `json:"token_id"` // nftID
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user