fix order and self order response

This commit is contained in:
Efril 2026-05-10 23:07:57 +07:00
parent f123de7233
commit 06d79046d0
4 changed files with 28 additions and 16 deletions

View File

@ -1,7 +1,7 @@
server: server:
base-url: base-url:
local-url: local-url:
self-order-url: http://localhost:5174 self-order-url: http://localhost:5173
port: 4000 port: 4000
jwt: jwt:
@ -58,4 +58,4 @@ fonnte:
fcm: fcm:
credentials_file: "infra/firebase-service-account.json" credentials_file: "infra/firebase-service-account.json"
project_id: "your-firebase-project-id" project_id: "apskel-pos-v2"

View File

@ -97,6 +97,7 @@ type SelfOrderOrderItem struct {
PaymentStatus string `json:"payment_status"` PaymentStatus string `json:"payment_status"`
IsVoid bool `json:"is_void"` IsVoid bool `json:"is_void"`
IsRefund bool `json:"is_refund"` IsRefund bool `json:"is_refund"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
Items []SelfOrderOrderLineItem `json:"items,omitempty"` Items []SelfOrderOrderLineItem `json:"items,omitempty"`
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
} }

View File

@ -408,6 +408,7 @@ func (h *SelfOrderHandler) GetOrdersBySession(c *gin.Context) {
RemainingAmount: o.RemainingAmount, RemainingAmount: o.RemainingAmount,
PaymentStatus: string(o.PaymentStatus), PaymentStatus: string(o.PaymentStatus),
IsVoid: o.IsVoid, IsVoid: o.IsVoid,
Metadata: o.Metadata,
IsRefund: o.IsRefund, IsRefund: o.IsRefund,
CreatedAt: o.CreatedAt, CreatedAt: o.CreatedAt,
} }

View File

@ -11,6 +11,7 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
"gorm.io/gorm" "gorm.io/gorm"
"gorm.io/gorm/clause"
) )
type InventoryRepository interface { type InventoryRepository interface {
@ -278,7 +279,12 @@ func (r *InventoryRepositoryImpl) UpdateReorderLevel(ctx context.Context, id uui
} }
func (r *InventoryRepositoryImpl) BulkCreate(ctx context.Context, inventoryItems []*entities.Inventory) error { func (r *InventoryRepositoryImpl) BulkCreate(ctx context.Context, inventoryItems []*entities.Inventory) error {
return r.db.WithContext(ctx).CreateInBatches(inventoryItems, 100).Error return r.db.WithContext(ctx).
Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "outlet_id"}, {Name: "product_id"}},
DoNothing: true,
}).
CreateInBatches(inventoryItems, 100).Error
} }
func (r *InventoryRepositoryImpl) BulkUpdate(ctx context.Context, inventoryItems []*entities.Inventory) error { func (r *InventoryRepositoryImpl) BulkUpdate(ctx context.Context, inventoryItems []*entities.Inventory) error {
@ -301,21 +307,25 @@ func (r *InventoryRepositoryImpl) BulkAdjustQuantity(ctx context.Context, adjust
return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
for productID, delta := range adjustments { for productID, delta := range adjustments {
var inventory entities.Inventory var inventory entities.Inventory
if err := tx.Where("product_id = ? AND outlet_id = ?", productID, outletID).First(&inventory).Error; err != nil { err := tx.Set("gorm:query_option", "FOR UPDATE").
if errors.Is(err, gorm.ErrRecordNotFound) { Where("product_id = ? AND outlet_id = ?", productID, outletID).
// Inventory doesn't exist, create it with initial quantity First(&inventory).Error
if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
// Use FirstOrCreate to handle race conditions — avoids duplicate key
// if another transaction already inserted this row concurrently.
inventory = entities.Inventory{ inventory = entities.Inventory{
ProductID: productID, ProductID: productID,
OutletID: outletID, OutletID: outletID,
Quantity: 0, Quantity: 0,
ReorderLevel: 0, ReorderLevel: 0,
} }
if err := tx.Create(&inventory).Error; err != nil { if err := tx.Where(entities.Inventory{ProductID: productID, OutletID: outletID}).
FirstOrCreate(&inventory).Error; err != nil {
return fmt.Errorf("failed to create inventory record for product %s: %w", productID, err) return fmt.Errorf("failed to create inventory record for product %s: %w", productID, err)
} }
} else {
return err
}
} }
inventory.UpdateQuantity(delta) inventory.UpdateQuantity(delta)