fix order and self order response
This commit is contained in:
parent
f123de7233
commit
06d79046d0
@ -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"
|
||||||
@ -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"`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user