Files
template-vitrine/backend/internal/modules/orders/model.go
T
2026-09-14 20:50:19 +02:00

64 lines
2.0 KiB
Go

// Package orders lets a customer (connected or not, per spec section 17-19)
// place an order directly from the storefront, and lets the admin track
// and update it. Pricing is never trusted from the client: each line is
// resolved against the pricing module's authoritative price tier at
// creation time.
package orders
import (
"time"
"github.com/google/uuid"
)
const (
StatusPending = "pending"
StatusConfirmed = "confirmed"
StatusPreparing = "preparing"
StatusShipped = "shipped"
StatusCompleted = "completed"
StatusCancelled = "cancelled"
)
var ValidStatuses = map[string]bool{
StatusPending: true,
StatusConfirmed: true,
StatusPreparing: true,
StatusShipped: true,
StatusCompleted: true,
StatusCancelled: true,
}
type Order struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey"`
CustomerName string `gorm:"not null"`
CustomerEmail string `gorm:"not null"`
CustomerPhone string `gorm:"not null;default:''"`
Status string `gorm:"not null;default:pending"`
TotalCents int64 `gorm:"not null;default:0"`
Notes string `gorm:"not null;default:''"`
CreatedAt time.Time
UpdatedAt time.Time
}
func (Order) TableName() string { return "orders" }
// OrderItem snapshots the product name, unit symbol and unit price at order
// time, so the order stays accurate even if the product/unit is later
// renamed or deleted.
type OrderItem struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey"`
OrderID uuid.UUID `gorm:"type:uuid;not null;index"`
ProductID *uuid.UUID `gorm:"type:uuid"`
ProductName string `gorm:"not null"`
PriceTierID *uuid.UUID `gorm:"type:uuid"`
UnitSymbol string `gorm:"not null"`
TierQuantity float64 `gorm:"not null"`
Multiplier int64 `gorm:"not null;default:1"`
UnitPriceCents int64 `gorm:"not null"`
TotalCents int64 `gorm:"not null"`
CreatedAt time.Time
}
func (OrderItem) TableName() string { return "order_items" }