github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/pkg/mw/app/coin/delete.go (about) 1 package appcoin 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/NpoolPlatform/chain-middleware/pkg/db" 8 "github.com/NpoolPlatform/chain-middleware/pkg/db/ent" 9 entdescription "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/coindescription" 10 entappexrate "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/exchangerate" 11 12 appcoincrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/app/coin" 13 descriptioncrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/app/coin/description" 14 appexratecrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/app/coin/exrate" 15 npool "github.com/NpoolPlatform/message/npool/chain/mw/v1/app/coin" 16 ) 17 18 type deleteHandler struct { 19 *Handler 20 } 21 22 func (h *deleteHandler) deleteAppCoin(ctx context.Context, tx *ent.Tx) error { 23 now := uint32(time.Now().Unix()) 24 info, err := appcoincrud.UpdateSet( 25 tx.AppCoin.UpdateOneID(*h.ID), 26 &appcoincrud.Req{ 27 DeletedAt: &now, 28 }, 29 ).Save(ctx) 30 if err != nil { 31 return err 32 } 33 34 h.AppID = &info.AppID 35 h.CoinTypeID = &info.CoinTypeID 36 37 return nil 38 } 39 40 func (h *deleteHandler) deleteExrate(ctx context.Context, tx *ent.Tx) error { 41 info, err := tx. 42 ExchangeRate. 43 Query(). 44 Where( 45 entappexrate.AppID(*h.AppID), 46 entappexrate.CoinTypeID(*h.CoinTypeID), 47 ). 48 ForUpdate(). 49 Only(ctx) 50 if err != nil { 51 if !ent.IsNotFound(err) { 52 return err 53 } 54 } 55 if info == nil { 56 return nil 57 } 58 59 now := uint32(time.Now().Unix()) 60 if _, err := appexratecrud.UpdateSet( 61 info.Update(), 62 &appexratecrud.Req{ 63 DeletedAt: &now, 64 }, 65 ).Save(ctx); err != nil { 66 return err 67 } 68 69 return nil 70 } 71 72 func (h *deleteHandler) deleteCoinDescription(ctx context.Context, tx *ent.Tx) error { 73 infos, err := tx. 74 CoinDescription. 75 Query(). 76 Where( 77 entdescription.AppID(*h.AppID), 78 entdescription.CoinTypeID(*h.CoinTypeID), 79 ). 80 ForUpdate(). 81 All(ctx) 82 if err != nil { 83 if !ent.IsNotFound(err) { 84 return err 85 } 86 } 87 if len(infos) == 0 { 88 return nil 89 } 90 91 now := uint32(time.Now().Unix()) 92 for _, info := range infos { 93 if _, err := descriptioncrud.UpdateSet( 94 info.Update(), 95 &descriptioncrud.Req{ 96 DeletedAt: &now, 97 }, 98 ).Save(ctx); err != nil { 99 return err 100 } 101 } 102 103 return nil 104 } 105 106 func (h *Handler) DeleteCoin(ctx context.Context) (*npool.Coin, error) { 107 info, err := h.GetCoin(ctx) 108 if err != nil { 109 return nil, err 110 } 111 112 handler := &deleteHandler{ 113 Handler: h, 114 } 115 116 err = db.WithTx(ctx, func(_ctx context.Context, tx *ent.Tx) error { 117 if err := handler.deleteAppCoin(_ctx, tx); err != nil { 118 return err 119 } 120 if err := handler.deleteCoinDescription(_ctx, tx); err != nil { 121 return err 122 } 123 if err := handler.deleteExrate(_ctx, tx); err != nil { 124 return err 125 } 126 return nil 127 }) 128 if err != nil { 129 return nil, err 130 } 131 132 return info, nil 133 }