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 { if m == nil { return fmt.Errorf("AddVoucher: nil payload") } if slices.ContainsFunc(g.Vouchers, func(v *voucher.Voucher) bool { return v.Code == m.Code }) { return fmt.Errorf("voucher already applied") } 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, voucherData) g.UpdateTotals() return nil }