Files
novatask/internal/logic/task/get_nft_list_logic.go
2025-01-08 11:41:11 +08:00

72 lines
1.8 KiB
Go

package task
import (
"context"
"nova_task/internal/pkg/errs"
"nova_task/internal/pkg/utils"
"nova_task/internal/svc"
"nova_task/internal/types"
"time"
"github.com/zeromicro/go-zero/core/logx"
)
type GetNftListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// NewGetNftListLogic 拉取玩家持有的nft列表
func NewGetNftListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetNftListLogic {
return &GetNftListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
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)
//}
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", req.WalletAddress), logx.Field("uid", uid))
return nil, errs.New(errs.ErrDatabaseOperate, err)
}
var nftList []types.UserNft
for _, token := range tokens {
var hasStake bool
var stakeAt string
var roleId uint64
nft, err := l.svcCtx.StakeNftModel.FindOneByTokenId(l.ctx, 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,
})
}
return &types.UserNftList{
NftList: nftList,
}, nil
}