nft task reward

This commit is contained in:
lianghuanjie
2024-12-31 20:39:02 +08:00
parent 029289e84c
commit ea86ab71e8
20 changed files with 945 additions and 170 deletions

View File

@@ -2,8 +2,6 @@ package task
import (
"context"
"errors"
"nova_task/internal/model"
"nova_task/internal/pkg/errs"
"nova_task/internal/pkg/utils"
"nova_task/internal/svc"
@@ -19,7 +17,7 @@ type GetNftListLogic struct {
svcCtx *svc.ServiceContext
}
// 拉取玩家持有的nft列表
// NewGetNftListLogic 拉取玩家持有的nft列表
func NewGetNftListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetNftListLogic {
return &GetNftListLogic{
Logger: logx.WithContext(ctx),
@@ -28,20 +26,20 @@ func NewGetNftListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetNft
}
}
func (l *GetNftListLogic) GetNftList() (*types.UserNftList, error) {
func (l *GetNftListLogic) GetNftList(req *types.GetNftListReq) (*types.UserNftList, error) {
uid := utils.GetUidUint(l.ctx)
address, err := l.svcCtx.WalletModel.FindAddressByUid(l.ctx, uid)
if err != nil {
if errors.Is(err, model.ErrNotFound) {
return nil, errs.New(errs.ErrNotBindWallet, "")
}
l.Errorw("find address by uid failed", logx.Field("err", err), logx.Field("uid", uid))
return nil, errs.New(errs.ErrDatabaseOperate, err)
}
//address, err := l.svcCtx.WalletModel.FindAddressByUid(l.ctx, uid)
//if err != nil {
// if errors.Is(err, model.ErrNotFound) {
// return nil, errs.New(errs.ErrNotBindWallet, "")
// }
// l.Errorw("find address by uid failed", logx.Field("err", err), logx.Field("uid", uid))
// return nil, errs.New(errs.ErrDatabaseOperate, err)
//}
tokens, err := l.svcCtx.NftHolderModel.FindTokensByAddress(l.ctx, address)
tokens, err := l.svcCtx.NftHolderModel.FindTokensByAddress(l.ctx, req.WalletAddress)
if err != nil {
l.Errorw("find tokens by address failed", logx.Field("err", err), logx.Field("address", address), logx.Field("uid", uid))
l.Errorw("find tokens by address failed", logx.Field("err", err), logx.Field("address", req.WalletAddress), logx.Field("uid", uid))
return nil, errs.New(errs.ErrDatabaseOperate, err)
}
@@ -49,17 +47,21 @@ func (l *GetNftListLogic) GetNftList() (*types.UserNftList, error) {
for _, token := range tokens {
var hasStake bool
var stakeAt string
var roleId uint64
nft, err := l.svcCtx.StakeNftModel.FindOneByUidTokenId(l.ctx, uid, token)
if err == nil {
hasStake = nft.State == 1
if hasStake {
stakeAt = nft.UpdatedAt.Format(time.DateOnly)
roleId = nft.RoleId
}
}
nftList = append(nftList, types.UserNft{
TokenId: token,
Image: utils.TarotImg(token),
HasStake: hasStake,
StakeAt: stakeAt,
RoleId: roleId,
})
}

View File

@@ -3,6 +3,7 @@ package task
import (
"context"
"errors"
"github.com/spf13/cast"
"nova_task/internal/model"
"nova_task/internal/pkg/errs"
"nova_task/internal/pkg/utils"
@@ -76,6 +77,15 @@ func (l *GetStakeTaskDetailLogic) GetStakeTaskDetail() (*types.StakeTaskDetail,
canReceiveTokens = produceTokensToday
}
awardSeq := cast.ToInt(time.Now().Format("20060102"))
coefficient, err := l.svcCtx.StakeRewardModel.GetRandomCoefficientByUid(l.ctx, uid, awardSeq, taskConf.MinCoefficient, taskConf.MaxCoefficient)
if err != nil {
l.Errorw("get random coefficient failed", logx.Field("err", err), logx.Field("uid", uid), logx.Field("awardSeq", awardSeq))
return nil, errs.New(errs.ErrDatabaseOperate, err)
}
canReceiveTokens *= coefficient
return &types.StakeTaskDetail{
StartDate: start.Format(time.DateOnly),
EndDate: end.Format(time.DateOnly),

View File

@@ -26,7 +26,7 @@ func NewStakeNftLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StakeNft
func (l *StakeNftLogic) StakeNft(req *types.StakeNftList) error {
uid := utils.GetUidUint(l.ctx)
err := l.svcCtx.StakeNftModel.StakeNft(l.ctx, uid, req.TokenIds)
err := l.svcCtx.StakeNftModel.StakeNft(l.ctx, uid, req.RoleId, req.TokenIds)
if err != nil {
l.Errorw("stake nft failed", logx.Field("err", err), logx.Field("uid", uid), logx.Field("tokenIds", req.TokenIds))
return errs.New(errs.ErrDatabaseOperate, err)