github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/pkg/mw/fiat/create.go (about) 1 package fiat 2 3 import ( 4 "context" 5 "fmt" 6 7 fiatcrud "github.com/NpoolPlatform/chain-middleware/pkg/crud/fiat" 8 redis2 "github.com/NpoolPlatform/go-service-framework/pkg/redis" 9 basetypes "github.com/NpoolPlatform/message/npool/basetypes/v1" 10 npool "github.com/NpoolPlatform/message/npool/chain/mw/v1/fiat" 11 12 "github.com/NpoolPlatform/chain-middleware/pkg/db" 13 "github.com/NpoolPlatform/chain-middleware/pkg/db/ent" 14 "github.com/NpoolPlatform/libent-cruder/pkg/cruder" 15 16 "github.com/google/uuid" 17 ) 18 19 type createHandler struct { 20 *Handler 21 } 22 23 func (h *createHandler) createFiat(ctx context.Context, cli *ent.Client) error { 24 if _, err := fiatcrud.CreateSet( 25 cli.Fiat.Create(), 26 &fiatcrud.Req{ 27 EntID: h.EntID, 28 Name: h.Name, 29 Logo: h.Logo, 30 Unit: h.Unit, 31 }, 32 ).Save(ctx); err != nil { 33 return err 34 } 35 return nil 36 } 37 38 func (h *Handler) CreateFiat(ctx context.Context) (*npool.Fiat, error) { 39 if h.Name == nil { 40 return nil, fmt.Errorf("invalid fiatname") 41 } 42 if h.Unit == nil { 43 return nil, fmt.Errorf("invalid fiatunit") 44 } 45 46 lockKey := fmt.Sprintf( 47 "%v:%v", 48 basetypes.Prefix_PrefixSetFiat, 49 *h.Name, 50 ) 51 if err := redis2.TryLock(lockKey, 0); err != nil { 52 return nil, err 53 } 54 defer func() { 55 _ = redis2.Unlock(lockKey) 56 }() 57 58 h.Conds = &fiatcrud.Conds{ 59 Name: &cruder.Cond{Op: cruder.EQ, Val: *h.Name}, 60 } 61 h.Offset = 0 62 h.Limit = 2 63 64 fiat, err := h.GetFiatOnly(ctx) 65 if err != nil { 66 return nil, err 67 } 68 if fiat != nil { 69 return fiat, nil 70 } 71 72 id := uuid.New() 73 if h.EntID == nil { 74 h.EntID = &id 75 } 76 77 handler := &createHandler{ 78 Handler: h, 79 } 80 81 err = db.WithClient(ctx, func(_ctx context.Context, cli *ent.Client) error { 82 if err := handler.createFiat(_ctx, cli); err != nil { 83 return err 84 } 85 return nil 86 }) 87 if err != nil { 88 return nil, err 89 } 90 91 return h.GetFiat(ctx) 92 }