github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/pkg/mw/fiat/update.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 17 type updateHandler struct { 18 *Handler 19 } 20 21 func (h *updateHandler) updateFiat(ctx context.Context, cli *ent.Client) error { 22 if _, err := fiatcrud.UpdateSet( 23 cli.Fiat.UpdateOneID(*h.ID), 24 &fiatcrud.Req{ 25 Name: h.Name, 26 Logo: h.Logo, 27 Unit: h.Unit, 28 }, 29 ).Save(ctx); err != nil { 30 return err 31 } 32 return nil 33 } 34 35 func (h *Handler) UpdateFiat(ctx context.Context) (*npool.Fiat, error) { 36 if h.ID == nil { 37 return nil, fmt.Errorf("invalid id") 38 } 39 40 lockKey := fmt.Sprintf( 41 "%v:%v", 42 basetypes.Prefix_PrefixSetFiat, 43 *h.Name, 44 ) 45 if err := redis2.TryLock(lockKey, 0); err != nil { 46 return nil, err 47 } 48 defer func() { 49 _ = redis2.Unlock(lockKey) 50 }() 51 52 h.Conds = &fiatcrud.Conds{ 53 Name: &cruder.Cond{Op: cruder.EQ, Val: *h.Name}, 54 } 55 h.Offset = 0 56 h.Limit = 2 57 58 fiat, err := h.GetFiatOnly(ctx) 59 if err != nil { 60 return nil, err 61 } 62 if fiat != nil && fiat.ID != *h.ID { 63 return nil, fmt.Errorf("fiat exist") 64 } 65 66 handler := &updateHandler{ 67 Handler: h, 68 } 69 70 err = db.WithClient(ctx, func(_ctx context.Context, cli *ent.Client) error { 71 if err := handler.updateFiat(_ctx, cli); err != nil { 72 return err 73 } 74 return nil 75 }) 76 if err != nil { 77 return nil, err 78 } 79 80 return h.GetFiat(ctx) 81 }