github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/pkg/mw/coin/delete.go (about) 1 //nolint:dupl 2 package coin 3 4 import ( 5 "context" 6 "fmt" 7 "time" 8 9 npool "github.com/NpoolPlatform/message/npool/chain/mw/v1/coin" 10 11 basecrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/coin" 12 extracrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/coin/extra" 13 settingcrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/coin/setting" 14 15 "github.com/NpoolPlatform/chain-middleware/pkg/db" 16 "github.com/NpoolPlatform/chain-middleware/pkg/db/ent" 17 entextra "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/coinextra" 18 entsetting "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/setting" 19 20 "github.com/google/uuid" 21 ) 22 23 type deleteHandler struct { 24 *Handler 25 } 26 27 func (h *deleteHandler) deleteCoinBase(ctx context.Context, tx *ent.Tx) error { 28 now := uint32(time.Now().Unix()) 29 if _, err := basecrud.UpdateSet( 30 tx.CoinBase.UpdateOneID(*h.ID), 31 &basecrud.Req{ 32 DeletedAt: &now, 33 }, 34 ).Save(ctx); err != nil { 35 return err 36 } 37 return nil 38 } 39 40 func (h *deleteHandler) deleteCoinExtra(ctx context.Context, tx *ent.Tx) error { 41 info, err := tx. 42 CoinExtra. 43 Query(). 44 Where( 45 entextra.CoinTypeID(*h.EntID), 46 ). 47 ForUpdate(). 48 Only(ctx) 49 if err != nil { 50 if !ent.IsNotFound(err) { 51 return err 52 } 53 } 54 if info == nil { 55 return nil 56 } 57 58 now := uint32(time.Now().Unix()) 59 if _, err := extracrud.UpdateSet( 60 info.Update(), 61 &extracrud.Req{ 62 DeletedAt: &now, 63 }, 64 ).Save(ctx); err != nil { 65 return err 66 } 67 68 return nil 69 } 70 71 func (h *deleteHandler) deleteCoinSetting(ctx context.Context, tx *ent.Tx) error { 72 info, err := tx. 73 Setting. 74 Query(). 75 Where( 76 entsetting.CoinTypeID(*h.EntID), 77 ). 78 ForUpdate(). 79 Only(ctx) 80 if err != nil { 81 if !ent.IsNotFound(err) { 82 return err 83 } 84 } 85 if info == nil { 86 return nil 87 } 88 89 now := uint32(time.Now().Unix()) 90 if _, err := settingcrud.UpdateSet( 91 info.Update(), 92 &settingcrud.Req{ 93 DeletedAt: &now, 94 }, 95 ).Save(ctx); err != nil { 96 return err 97 } 98 99 return nil 100 } 101 102 func (h *Handler) DeleteCoin(ctx context.Context) (*npool.Coin, error) { 103 if h.ID == nil { 104 return nil, fmt.Errorf("invalid cointypeid") 105 } 106 107 info, err := h.GetCoin(ctx) 108 if err != nil { 109 return nil, err 110 } 111 112 entID, err := uuid.Parse(info.EntID) 113 if err != nil { 114 return nil, err 115 } 116 h.EntID = &entID 117 handler := &deleteHandler{ 118 Handler: h, 119 } 120 121 err = db.WithTx(ctx, func(_ctx context.Context, tx *ent.Tx) error { 122 if err := handler.deleteCoinBase(_ctx, tx); err != nil { 123 return err 124 } 125 if err := handler.deleteCoinExtra(_ctx, tx); err != nil { 126 return err 127 } 128 if err := handler.deleteCoinSetting(_ctx, tx); err != nil { 129 return err 130 } 131 return nil 132 }) 133 if err != nil { 134 return nil, err 135 } 136 137 return info, nil 138 }