package admin import ( "context" "nova_task/internal/pkg/errs" "github.com/zeromicro/go-zero/core/logx" "nova_task/internal/svc" ) type FixNftStakerLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 修正 NFT 质押者 func NewFixNftStakerLogic(ctx context.Context, svcCtx *svc.ServiceContext) *FixNftStakerLogic { return &FixNftStakerLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *FixNftStakerLogic) FixNftStaker() error { nfts, err := l.svcCtx.StakeNftModel.AllStakeNft(l.ctx) if err != nil { l.Errorw("get AllStakeNft failed", logx.Field("err", err)) return errs.New(errs.ErrDatabaseOperate, err) } for _, n := range nfts { nft, err := l.svcCtx.NftHolderModel.FindOneByTokenId(l.ctx, n.TokenId) if err != nil { l.Errorw("Find Nft by tokenId failed", logx.Field("err", err)) continue } wUid, err := l.svcCtx.WalletModel.FindUidByAddress(l.ctx, nft.Address) if err != nil { l.Errorw("Find Wallet by address failed", logx.Field("err", err)) continue } if n.Uid != wUid { n.Uid = wUid err = l.svcCtx.StakeNftModel.Update(l.ctx, &n) if err != nil { l.Errorw("Update Nft failed", logx.Field("err", err)) } } } return errs.Success() }