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 }