Complete refactor to new grpc control plane and only http proxy for carts #4

Merged
mats merged 75 commits from refactor/http-proxy into main 2025-10-14 22:31:28 +02:00
2 changed files with 34 additions and 7 deletions
Showing only changes of commit 9f83717ea9 - Show all commits

View File

@@ -4,24 +4,37 @@ import (
"fmt"
"slices"
"git.tornberg.me/go-cart-actor/pkg/actor"
"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")
return &actor.MutationError{
Message: "AddVoucher: nil payload",
Code: 1001,
StatusCode: 400,
}
}
if slices.ContainsFunc(g.Vouchers, func(v *voucher.Voucher) bool {
return v.Code == m.Code
}) {
return fmt.Errorf("voucher already applied")
return &actor.MutationError{
Message: "voucher already applied",
Code: 1002,
StatusCode: 400,
}
}
voucherData, err := ctx.VoucherService.GetVoucher(m.Code)
if err != nil {
return fmt.Errorf("cant find voucher: %w", err)
return &actor.MutationError{
Message: fmt.Sprintf("cant find voucher: %v", err),
Code: 1003,
StatusCode: 400,
}
}
if voucherData == nil {

View File

@@ -12,7 +12,7 @@ import (
type ApplyResult struct {
Type string `json:"type"`
Mutation proto.Message `json:"mutation"`
Error string `json:"error,omitempty"`
Error error `json:"error,omitempty"`
}
type MutationRegistry interface {
@@ -30,9 +30,23 @@ type ProtoMutationRegistry struct {
}
var (
ErrMutationNotRegistered = fmt.Errorf("mutation not registered")
ErrMutationNotRegistered = &MutationError{
Message: "mutation not registered",
Code: 255,
StatusCode: 500,
}
)
type MutationError struct {
Message string `json:"message"`
Code uint32 `json:"code"`
StatusCode uint32 `json:"status_code"`
}
func (m MutationError) Error() string {
return m.Message
}
// MutationOption configures additional behavior for a registered mutation.
type MutationOption func(*mutationOptions)
@@ -167,11 +181,11 @@ func (r *ProtoMutationRegistry) Apply(grain any, msg ...proto.Message) ([]ApplyR
entry, ok := r.mutationRegistry[rt]
r.mutationRegistryMu.RUnlock()
if !ok {
results = append(results, ApplyResult{Error: ErrMutationNotRegistered.Error(), Type: rt.Name(), Mutation: m})
results = append(results, ApplyResult{Error: ErrMutationNotRegistered, Type: rt.Name(), Mutation: m})
continue
}
err := entry.Handle(grain, m)
results = append(results, ApplyResult{Error: err.Error(), Type: rt.Name(), Mutation: m})
results = append(results, ApplyResult{Error: err, Type: rt.Name(), Mutation: m})
}
// if entry.updateTotals {