change alot of id values
All checks were successful
Build and Publish / Metadata (push) Successful in 15s
Build and Publish / BuildAndDeployAmd64 (push) Successful in 1m11s
Build and Publish / BuildAndDeployArm64 (push) Successful in 4m7s

This commit is contained in:
matst80
2025-10-14 21:24:50 +02:00
parent 4bec3f8cc0
commit 1565cfdaba
14 changed files with 426 additions and 332 deletions

View File

@@ -8,7 +8,6 @@ import (
"time"
messages "git.tornberg.me/go-cart-actor/pkg/messages"
"git.tornberg.me/go-cart-actor/pkg/voucher"
)
// Legacy padded [16]byte CartId and its helper methods removed.
@@ -31,9 +30,9 @@ type ItemMeta struct {
}
type CartItem struct {
Id int `json:"id"`
ItemId int `json:"itemId,omitempty"`
ParentId int `json:"parentId,omitempty"`
Id uint32 `json:"id"`
ItemId uint32 `json:"itemId,omitempty"`
ParentId uint32 `json:"parentId,omitempty"`
Sku string `json:"sku"`
Price Price `json:"price"`
@@ -53,10 +52,10 @@ type CartItem struct {
}
type CartDelivery struct {
Id int `json:"id"`
Id uint32 `json:"id"`
Provider string `json:"provider"`
Price Price `json:"price"`
Items []int `json:"items"`
Items []uint32 `json:"items"`
PickupPoint *messages.PickupPoint `json:"pickupPoint,omitempty"`
}
@@ -69,8 +68,9 @@ type CartNotification struct {
type CartGrain struct {
mu sync.RWMutex
lastItemId int
lastDeliveryId int
lastItemId uint32
lastDeliveryId uint32
lastVoucherId uint32
lastAccess time.Time
lastChange time.Time // unix seconds of last successful mutation (replay sets from event ts)
userId string
@@ -83,10 +83,17 @@ type CartGrain struct {
PaymentInProgress bool `json:"paymentInProgress"`
OrderReference string `json:"orderReference,omitempty"`
PaymentStatus string `json:"paymentStatus,omitempty"`
Vouchers []*voucher.Voucher `json:"vouchers,omitempty"`
Vouchers []*Voucher `json:"vouchers,omitempty"`
Notifications []CartNotification `json:"cartNotification,omitempty"`
}
type Voucher struct {
Code string `json:"code"`
Rules []*messages.VoucherRule `json:"rules"`
Id uint32 `json:"id"`
Value Price `json:"value"`
}
func (c *CartGrain) GetId() uint64 {
return uint64(c.Id)
}
@@ -124,8 +131,8 @@ func (c *CartGrain) GetState() ([]byte, error) {
return json.Marshal(c)
}
func (c *CartGrain) ItemsWithDelivery() []int {
ret := make([]int, 0, len(c.Items))
func (c *CartGrain) ItemsWithDelivery() []uint32 {
ret := make([]uint32, 0, len(c.Items))
for _, item := range c.Items {
for _, delivery := range c.Deliveries {
for _, id := range delivery.Items {
@@ -138,8 +145,8 @@ func (c *CartGrain) ItemsWithDelivery() []int {
return ret
}
func (c *CartGrain) ItemsWithoutDelivery() []int {
ret := make([]int, 0, len(c.Items))
func (c *CartGrain) ItemsWithoutDelivery() []uint32 {
ret := make([]uint32, 0, len(c.Items))
hasDelivery := c.ItemsWithDelivery()
for _, item := range c.Items {
found := slices.Contains(hasDelivery, item.Id)

View File

@@ -2,13 +2,11 @@ package main
import (
"testing"
"git.tornberg.me/go-cart-actor/pkg/voucher"
)
// helper to create a cart grain with items and deliveries
func newTestCart() *CartGrain {
return &CartGrain{Items: []*CartItem{}, Deliveries: []*CartDelivery{}, Vouchers: []*voucher.Voucher{}, Notifications: []CartNotification{}}
return &CartGrain{Items: []*CartItem{}, Deliveries: []*CartDelivery{}, Vouchers: []*Voucher{}, Notifications: []CartNotification{}}
}
func TestCartGrainUpdateTotalsBasic(t *testing.T) {
@@ -22,7 +20,7 @@ func TestCartGrainUpdateTotalsBasic(t *testing.T) {
{Id: 2, Price: item2Price, OrgPrice: &item2Price, Quantity: 1},
}
deliveryPrice := Price{IncVat: 4900, VatRates: map[float32]int64{25: 980}}
c.Deliveries = []*CartDelivery{{Id: 1, Price: deliveryPrice, Items: []int{1, 2}}}
c.Deliveries = []*CartDelivery{{Id: 1, Price: deliveryPrice, Items: []uint32{1, 2}}}
c.UpdateTotals()

View File

@@ -100,7 +100,7 @@ type MutationContext struct {
func main() {
controlPlaneConfig := actor.DefaultServerConfig()
ctx := MutationContext{}
reg := actor.NewMutationRegistry()
reg.RegisterMutations(
actor.NewMutation(AddItem, func() *messages.AddItem {
@@ -130,7 +130,7 @@ func main() {
actor.NewMutation(ClearCart, func() *messages.ClearCartRequest {
return &messages.ClearCartRequest{}
}),
actor.NewMutation(ctx.AddVoucher, func() *messages.AddVoucher {
actor.NewMutation(AddVoucher, func() *messages.AddVoucher {
return &messages.AddVoucher{}
}),
)

View File

@@ -47,7 +47,7 @@ func AddItem(g *CartGrain, m *messages.AddItem) error {
g.Items = append(g.Items, &CartItem{
Id: g.lastItemId,
ItemId: int(m.ItemId),
ItemId: uint32(m.ItemId),
Quantity: int(m.Quantity),
Sku: m.Sku,
Meta: ItemMeta{

View File

@@ -1,15 +1,13 @@
package main
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 {
func AddVoucher(g *CartGrain, m *messages.AddVoucher) error {
if m == nil {
return &actor.MutationError{
Message: "AddVoucher: nil payload",
@@ -18,7 +16,7 @@ func (ctx *MutationContext) AddVoucher(g *CartGrain, m *messages.AddVoucher) err
}
}
if slices.ContainsFunc(g.Vouchers, func(v *voucher.Voucher) bool {
if slices.ContainsFunc(g.Vouchers, func(v *Voucher) bool {
return v.Code == m.Code
}) {
return &actor.MutationError{
@@ -28,20 +26,13 @@ func (ctx *MutationContext) AddVoucher(g *CartGrain, m *messages.AddVoucher) err
}
}
voucherData, err := ctx.VoucherService.GetVoucher(m.Code)
if err != nil {
return &actor.MutationError{
Message: fmt.Sprintf("cant find voucher: %v", err),
Code: 1003,
StatusCode: 400,
}
}
if voucherData == nil {
return nil
}
g.Vouchers = append(g.Vouchers, voucherData)
g.lastVoucherId++
g.Vouchers = append(g.Vouchers, &Voucher{
Id: g.lastVoucherId,
Code: m.Code,
Rules: m.VoucherRules,
Value: *NewPriceFromIncVat(m.Value, 25.0),
})
g.UpdateTotals()
return nil
}

View File

@@ -33,7 +33,7 @@ func ChangeQuantity(g *CartGrain, m *messages.ChangeQuantity) error {
foundIndex := -1
for i, it := range g.Items {
if it.Id == int(m.Id) {
if it.Id == uint32(m.Id) {
foundIndex = i
break
}

View File

@@ -30,7 +30,7 @@ func RemoveDelivery(g *CartGrain, m *messages.RemoveDelivery) error {
if m == nil {
return fmt.Errorf("RemoveDelivery: nil payload")
}
targetID := int(m.Id)
targetID := uint32(m.Id)
index := -1
for i, d := range g.Deliveries {
if d.Id == targetID {

View File

@@ -26,7 +26,7 @@ func RemoveItem(g *CartGrain, m *messages.RemoveItem) error {
if m == nil {
return fmt.Errorf("RemoveItem: nil payload")
}
targetID := int(m.Id)
targetID := uint32(m.Id)
index := -1
for i, it := range g.Items {

View File

@@ -49,7 +49,7 @@ func SetDelivery(g *CartGrain, m *messages.SetDelivery) error {
}
withDelivery := g.ItemsWithDelivery()
targetItems := make([]int, 0)
targetItems := make([]uint32, 0)
if len(m.Items) == 0 {
// Use every item currently without a delivery
@@ -57,7 +57,7 @@ func SetDelivery(g *CartGrain, m *messages.SetDelivery) error {
} else {
// Validate explicit list
for _, id64 := range m.Items {
id := int(id64)
id := uint32(id64)
found := false
for _, it := range g.Items {
if it.Id == id {

View File

@@ -35,7 +35,7 @@ func SetPickupPoint(g *CartGrain, m *messages.SetPickupPoint) error {
}
for _, d := range g.Deliveries {
if d.Id == int(m.DeliveryId) {
if d.Id == uint32(m.DeliveryId) {
d.PickupPoint = &messages.PickupPoint{
Id: m.Id,
Name: m.Name,

View File

@@ -75,11 +75,11 @@ func (s *PoolServer) WriteResult(w http.ResponseWriter, result any) error {
func (s *PoolServer) DeleteItemHandler(w http.ResponseWriter, r *http.Request, id CartId) error {
itemIdString := r.PathValue("itemId")
itemId, err := strconv.Atoi(itemIdString)
itemId, err := strconv.ParseInt(itemIdString, 10, 64)
if err != nil {
return err
}
data, err := s.ApplyLocal(id, &messages.RemoveItem{Id: int64(itemId)})
data, err := s.ApplyLocal(id, &messages.RemoveItem{Id: uint32(itemId)})
if err != nil {
return err
}
@@ -88,7 +88,7 @@ func (s *PoolServer) DeleteItemHandler(w http.ResponseWriter, r *http.Request, i
type SetDeliveryRequest struct {
Provider string `json:"provider"`
Items []int64 `json:"items"`
Items []uint32 `json:"items"`
PickupPoint *messages.PickupPoint `json:"pickupPoint,omitempty"`
}
@@ -113,7 +113,7 @@ func (s *PoolServer) SetDeliveryHandler(w http.ResponseWriter, r *http.Request,
func (s *PoolServer) SetPickupPointHandler(w http.ResponseWriter, r *http.Request, id CartId) error {
deliveryIdString := r.PathValue("deliveryId")
deliveryId, err := strconv.Atoi(deliveryIdString)
deliveryId, err := strconv.ParseInt(deliveryIdString, 10, 64)
if err != nil {
return err
}
@@ -123,7 +123,7 @@ func (s *PoolServer) SetPickupPointHandler(w http.ResponseWriter, r *http.Reques
return err
}
reply, err := s.ApplyLocal(id, &messages.SetPickupPoint{
DeliveryId: int64(deliveryId),
DeliveryId: uint32(deliveryId),
Id: pickupPoint.Id,
Name: pickupPoint.Name,
Address: pickupPoint.Address,
@@ -144,7 +144,7 @@ func (s *PoolServer) RemoveDeliveryHandler(w http.ResponseWriter, r *http.Reques
if err != nil {
return err
}
reply, err := s.ApplyLocal(id, &messages.RemoveDelivery{Id: int64(deliveryId)})
reply, err := s.ApplyLocal(id, &messages.RemoveDelivery{Id: uint32(deliveryId)})
if err != nil {
return err
}
@@ -228,8 +228,15 @@ func (s *PoolServer) AddMultipleItemHandler(w http.ResponseWriter, r *http.Reque
return s.WriteResult(w, reply)
}
type AddRequest struct {
Sku string `json:"sku"`
Quantity int32 `json:"quantity"`
Country string `json:"country"`
StoreId *string `json:"storeId"`
}
func (s *PoolServer) AddSkuRequestHandler(w http.ResponseWriter, r *http.Request, id CartId) error {
addRequest := messages.AddRequest{}
addRequest := AddRequest{Quantity: 1}
err := json.NewDecoder(r.Body).Decode(&addRequest)
if err != nil {
return err

View File

@@ -81,7 +81,7 @@ func ToItemAddMessage(item *index.DataItem, storeId *string, qty int, country st
category5, _ := item.GetStringFieldValue(14) //.Fields[14].(string)
return &messages.AddItem{
ItemId: int64(item.Id),
ItemId: uint32(item.Id),
Quantity: int32(qty),
Price: int64(price),
OrgPrice: int64(orgPrice),