From 63925584d74797508d2ddf75c5713e430d062f0a Mon Sep 17 00:00:00 2001 From: jager Date: Sat, 11 Jan 2025 12:25:09 +0800 Subject: [PATCH] fix: nft holder update logic --- internal/logic/nft/holder_update_logic.go | 88 +++++++++++++---------- 1 file changed, 52 insertions(+), 36 deletions(-) diff --git a/internal/logic/nft/holder_update_logic.go b/internal/logic/nft/holder_update_logic.go index e0830d6..52bdca3 100644 --- a/internal/logic/nft/holder_update_logic.go +++ b/internal/logic/nft/holder_update_logic.go @@ -68,14 +68,17 @@ func (l *HolderUpdateLogic) HolderUpdate() { } } - var value int + var delAddress, addAddress string if nft.Id == 0 { // 新增 _, err = l.svcCtx.NftHolderModel.Insert(l.ctx, nft) - value = balance + addAddress = nft.Address } else { - // 持有数量变化 - value = balance - nft.Balance + // 地址变化 + if nft.Address != o.OwnerAddress { + delAddress = nft.Address + addAddress = o.OwnerAddress + } nft.Balance = balance nft.UpdateSeq = updateSeq nft.Address = o.OwnerAddress @@ -86,10 +89,10 @@ func (l *HolderUpdateLogic) HolderUpdate() { logx.Errorw("insert or update nft holder error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID), logx.Field("balance", balance)) } - // 余额有变化,记录变化日志 - if value != 0 { + // 新的持有地址(新增) + if addAddress != "" { _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ - Address: o.OwnerAddress, + Address: addAddress, TokenId: tk.TokenID, Value: balance, Balance: balance, @@ -98,39 +101,52 @@ func (l *HolderUpdateLogic) HolderUpdate() { logx.Errorw("insert nft holder change log error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID)) } } + + // 原地址(删除) + if delAddress != "" { + _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ + Address: delAddress, + TokenId: tk.TokenID, + Value: -balance, + Balance: 0, + }) + if err != nil { + logx.Errorw("insert nft holder change log error", logx.Field("error", err), logx.Field("address", o.OwnerAddress), logx.Field("token", tk.TokenID)) + } + } } } // 删除已经不持有的地址,且添加变化日志 - nfts, err := l.svcCtx.NftHolderModel.FindOtherUpdateSeq(l.ctx, updateSeq) - if err != nil { - logx.Errorw("find other update seq error", logx.Field("error", err)) - return - } - for _, nft := range nfts { - _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ - Address: nft.Address, - TokenId: nft.TokenId, - Value: -nft.Balance, - Balance: 0, - }) - if err != nil { - logx.Errorw("delete nft holder error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) - } - uid, err := l.svcCtx.WalletModel.FindUidByAddress(l.ctx, nft.Address) - if err != nil { - logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address)) - continue - } - err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true) - if err != nil { - logx.Errorw("un stake nft error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) - } - } - err = l.svcCtx.NftHolderModel.DeleteOtherUpdateSeq(l.ctx, updateSeq) - if err != nil { - logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq)) - } + //nfts, err := l.svcCtx.NftHolderModel.FindOtherUpdateSeq(l.ctx, updateSeq) + //if err != nil { + // logx.Errorw("find other update seq error", logx.Field("error", err)) + // return + //} + //for _, nft := range nfts { + // _, err = l.svcCtx.NftHolderChangeLogModel.Insert(l.ctx, &model.NhNftHolderChangeLog{ + // Address: nft.Address, + // TokenId: nft.TokenId, + // Value: -nft.Balance, + // Balance: 0, + // }) + // if err != nil { + // logx.Errorw("delete nft holder error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) + // } + // uid, err := l.svcCtx.WalletModel.FindUidByAddress(l.ctx, nft.Address) + // if err != nil { + // logx.Errorw("find uid by address error", logx.Field("error", err), logx.Field("address", nft.Address)) + // continue + // } + // err = l.svcCtx.StakeNftModel.UnStakeNft(l.ctx, uid, nft.TokenId, true) + // if err != nil { + // logx.Errorw("un stake nft error", logx.Field("error", err), logx.Field("address", nft.Address), logx.Field("token", nft.TokenId)) + // } + //} + //err = l.svcCtx.NftHolderModel.DeleteOtherUpdateSeq(l.ctx, updateSeq) + //if err != nil { + // logx.Errorw("delete other update seq error", logx.Field("error", err), logx.Field("update_seq", updateSeq)) + //} } type OwnerList struct {