diff --git a/cmd/cart/mutation_add_voucher.go b/cmd/cart/mutation_add_voucher.go index 0c24f9a..205438b 100644 --- a/cmd/cart/mutation_add_voucher.go +++ b/cmd/cart/mutation_add_voucher.go @@ -2,8 +2,10 @@ package main import ( "fmt" + "slices" "git.tornberg.me/go-cart-actor/pkg/messages" + "git.tornberg.me/go-cart-actor/pkg/voucher" ) func (ctx *MutationContext) AddVoucher(g *CartGrain, m *messages.AddVoucher) error { @@ -11,16 +13,22 @@ func (ctx *MutationContext) AddVoucher(g *CartGrain, m *messages.AddVoucher) err return fmt.Errorf("AddVoucher: nil payload") } - voucher, err := ctx.VoucherService.GetVoucher(m.Code) - if err != nil { - return fmt.Errorf("AddVoucher: %w", err) + if slices.ContainsFunc(g.Vouchers, func(v *voucher.Voucher) bool { + return v.Code == m.Code + }) { + return fmt.Errorf("voucher already applied") } - if voucher == nil { + voucherData, err := ctx.VoucherService.GetVoucher(m.Code) + if err != nil { + return fmt.Errorf("cant find voucher: %w", err) + } + + if voucherData == nil { return nil } - g.Vouchers = append(g.Vouchers, voucher) + g.Vouchers = append(g.Vouchers, voucherData) g.UpdateTotals() return nil }