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

     1  package coinusedfor
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/NpoolPlatform/chain-middleware/pkg/db/ent"
     7  	entcoinusedfor "github.com/NpoolPlatform/chain-middleware/pkg/db/ent/coinusedfor"
     8  	"github.com/NpoolPlatform/libent-cruder/pkg/cruder"
     9  	types "github.com/NpoolPlatform/message/npool/basetypes/chain/v1"
    10  
    11  	"github.com/google/uuid"
    12  )
    13  
    14  type Req struct {
    15  	CoinTypeID *uuid.UUID
    16  	UsedFor    *types.CoinUsedFor
    17  	Priority   *uint32
    18  	DeletedAt  *uint32
    19  }
    20  
    21  func CreateSet(c *ent.CoinUsedForCreate, req *Req) *ent.CoinUsedForCreate {
    22  	if req.CoinTypeID != nil {
    23  		c.SetCoinTypeID(*req.CoinTypeID)
    24  	}
    25  	if req.UsedFor != nil {
    26  		c.SetUsedFor(req.UsedFor.String())
    27  	}
    28  	if req.Priority != nil {
    29  		c.SetPriority(*req.Priority)
    30  	}
    31  	return c
    32  }
    33  
    34  func UpdateSet(u *ent.CoinUsedForUpdateOne, req *Req) *ent.CoinUsedForUpdateOne {
    35  	if req.Priority != nil {
    36  		u.SetPriority(*req.Priority)
    37  	}
    38  	if req.DeletedAt != nil {
    39  		u.SetDeletedAt(*req.DeletedAt)
    40  	}
    41  	return u
    42  }
    43  
    44  type Conds struct {
    45  	EntID       *cruder.Cond
    46  	CoinTypeID  *cruder.Cond
    47  	CoinTypeIDs *cruder.Cond
    48  	UsedFor     *cruder.Cond
    49  	UsedFors    *cruder.Cond
    50  }
    51  
    52  //nolint:gocyclo
    53  func SetQueryConds(q *ent.CoinUsedForQuery, conds *Conds) (*ent.CoinUsedForQuery, error) {
    54  	if conds.EntID != nil {
    55  		id, ok := conds.EntID.Val.(uuid.UUID)
    56  		if !ok {
    57  			return nil, fmt.Errorf("invalid entid")
    58  		}
    59  		switch conds.EntID.Op {
    60  		case cruder.EQ:
    61  			q.Where(entcoinusedfor.EntID(id))
    62  		default:
    63  			return nil, fmt.Errorf("invalid usedfor field")
    64  		}
    65  	}
    66  	if conds.CoinTypeID != nil {
    67  		id, ok := conds.CoinTypeID.Val.(uuid.UUID)
    68  		if !ok {
    69  			return nil, fmt.Errorf("invalid cointypeid")
    70  		}
    71  		switch conds.CoinTypeID.Op {
    72  		case cruder.EQ:
    73  			q.Where(entcoinusedfor.CoinTypeID(id))
    74  		default:
    75  			return nil, fmt.Errorf("invalid usedfor field")
    76  		}
    77  	}
    78  	if conds.CoinTypeIDs != nil {
    79  		ids, ok := conds.CoinTypeIDs.Val.([]uuid.UUID)
    80  		if !ok {
    81  			return nil, fmt.Errorf("invalid cointypeids")
    82  		}
    83  		switch conds.CoinTypeIDs.Op {
    84  		case cruder.IN:
    85  			q.Where(entcoinusedfor.CoinTypeIDIn(ids...))
    86  		default:
    87  			return nil, fmt.Errorf("invalid usedfor field")
    88  		}
    89  	}
    90  	if conds.UsedFor != nil {
    91  		usedFor, ok := conds.UsedFor.Val.(types.CoinUsedFor)
    92  		if !ok {
    93  			return nil, fmt.Errorf("invalid usedfor")
    94  		}
    95  		switch conds.UsedFor.Op {
    96  		case cruder.EQ:
    97  			q.Where(entcoinusedfor.UsedFor(usedFor.String()))
    98  		default:
    99  			return nil, fmt.Errorf("invalid usedfor field")
   100  		}
   101  	}
   102  	if conds.UsedFors != nil {
   103  		usedFors, ok := conds.UsedFors.Val.([]types.CoinUsedFor)
   104  		if !ok {
   105  			return nil, fmt.Errorf("invalid usedfors")
   106  		}
   107  		_usedFors := []string{}
   108  		for _, usedFor := range usedFors {
   109  			_usedFors = append(_usedFors, usedFor.String())
   110  		}
   111  		switch conds.UsedFors.Op {
   112  		case cruder.IN:
   113  			q.Where(entcoinusedfor.UsedForIn(_usedFors...))
   114  		default:
   115  			return nil, fmt.Errorf("invalid usedfor field")
   116  		}
   117  	}
   118  	q.Where(entcoinusedfor.DeletedAt(0))
   119  	return q, nil
   120  }