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  }