github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/pkg/crud/app/coin/exrate/crud.go (about)

     1  package exrate
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/NpoolPlatform/chain-middleware/pkg/db/ent"
     7  	entexrate "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/exchangerate"
     8  	"github.com/NpoolPlatform/libent-cruder/pkg/cruder"
     9  
    10  	"github.com/google/uuid"
    11  	"github.com/shopspring/decimal"
    12  )
    13  
    14  type Req struct {
    15  	ID            *uint32
    16  	EntID         *uuid.UUID
    17  	AppID         *uuid.UUID
    18  	CoinTypeID    *uuid.UUID
    19  	MarketValue   *decimal.Decimal
    20  	SettlePercent *uint32
    21  	SettleTips    []string
    22  	Setter        *uuid.UUID
    23  	DeletedAt     *uint32
    24  }
    25  
    26  func CreateSet(c *ent.ExchangeRateCreate, req *Req) *ent.ExchangeRateCreate {
    27  	if req.ID != nil {
    28  		c.SetID(*req.ID)
    29  	}
    30  	if req.EntID != nil {
    31  		c.SetEntID(*req.EntID)
    32  	}
    33  	if req.AppID != nil {
    34  		c.SetAppID(*req.AppID)
    35  	}
    36  	if req.CoinTypeID != nil {
    37  		c.SetCoinTypeID(*req.CoinTypeID)
    38  	}
    39  	if req.MarketValue != nil {
    40  		c.SetMarketValue(*req.MarketValue)
    41  		settleValue := *req.MarketValue
    42  		if req.SettlePercent != nil {
    43  			settleValue = settleValue.Mul(decimal.NewFromInt(int64(*req.SettlePercent)))
    44  			settleValue = settleValue.Div(decimal.NewFromInt(100)) //nolint
    45  		}
    46  		c.SetSettleValue(settleValue)
    47  	}
    48  
    49  	if req.SettlePercent != nil {
    50  		c.SetSettlePercent(*req.SettlePercent)
    51  	}
    52  	if len(req.SettleTips) > 0 {
    53  		c.SetSettleTips(req.SettleTips)
    54  	}
    55  	if req.Setter != nil {
    56  		c.SetSetter(*req.Setter)
    57  	}
    58  	return c
    59  }
    60  
    61  func UpdateSet(u *ent.ExchangeRateUpdateOne, req *Req) *ent.ExchangeRateUpdateOne {
    62  	settlePercent, _ := u.Mutation().SettlePercent()
    63  	marketValue, _ := u.Mutation().MarketValue()
    64  
    65  	if req.MarketValue != nil {
    66  		u = u.SetMarketValue(*req.MarketValue)
    67  		marketValue = *req.MarketValue
    68  	}
    69  	if req.SettlePercent != nil {
    70  		u = u.SetSettlePercent(*req.SettlePercent)
    71  		settlePercent = *req.SettlePercent
    72  	}
    73  
    74  	if len(req.SettleTips) > 0 {
    75  		u = u.SetSettleTips(req.SettleTips)
    76  	}
    77  
    78  	settleValue, _ := u.Mutation().SettleValue() //nolint
    79  	settleValue = marketValue.Mul(decimal.NewFromInt(int64(settlePercent)))
    80  	settleValue = settleValue.Div(decimal.NewFromInt(100)) //nolint
    81  	u = u.SetSettleValue(settleValue)
    82  
    83  	if req.DeletedAt != nil {
    84  		u = u.SetDeletedAt(*req.DeletedAt)
    85  	}
    86  
    87  	return u
    88  }
    89  
    90  type Conds struct {
    91  	EntID      *cruder.Cond
    92  	AppID      *cruder.Cond
    93  	CoinTypeID *cruder.Cond
    94  }
    95  
    96  func SetQueryConds(q *ent.ExchangeRateQuery, conds *Conds) (*ent.ExchangeRateQuery, error) {
    97  	if conds.EntID != nil {
    98  		id, ok := conds.EntID.Val.(uuid.UUID)
    99  		if !ok {
   100  			return nil, fmt.Errorf("invalid entid")
   101  		}
   102  		switch conds.EntID.Op {
   103  		case cruder.EQ:
   104  			q.Where(entexrate.EntID(id))
   105  		default:
   106  			return nil, fmt.Errorf("invalid exrate field")
   107  		}
   108  	}
   109  	if conds.AppID != nil {
   110  		id, ok := conds.AppID.Val.(uuid.UUID)
   111  		if !ok {
   112  			return nil, fmt.Errorf("invalid appid")
   113  		}
   114  		switch conds.AppID.Op {
   115  		case cruder.EQ:
   116  			q.Where(entexrate.AppID(id))
   117  		default:
   118  			return nil, fmt.Errorf("invalid exrate field")
   119  		}
   120  	}
   121  	if conds.CoinTypeID != nil {
   122  		id, ok := conds.CoinTypeID.Val.(uuid.UUID)
   123  		if !ok {
   124  			return nil, fmt.Errorf("invalid cointypeid")
   125  		}
   126  		switch conds.CoinTypeID.Op {
   127  		case cruder.EQ:
   128  			q.Where(entexrate.CoinTypeID(id))
   129  		default:
   130  			return nil, fmt.Errorf("invalid exrate field")
   131  		}
   132  	}
   133  	q.Where(entexrate.DeletedAt(0))
   134  	return q, nil
   135  }