80 lines
3.5 KiB
Go
80 lines
3.5 KiB
Go
|
|
package contract
|
||
|
|
|
||
|
|
import (
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/google/uuid"
|
||
|
|
)
|
||
|
|
|
||
|
|
type CreateOrderIngredientTransactionRequest struct {
|
||
|
|
OrderID uuid.UUID `json:"order_id" validate:"required"`
|
||
|
|
OrderItemID *uuid.UUID `json:"order_item_id,omitempty"`
|
||
|
|
ProductID uuid.UUID `json:"product_id" validate:"required"`
|
||
|
|
ProductVariantID *uuid.UUID `json:"product_variant_id,omitempty"`
|
||
|
|
IngredientID uuid.UUID `json:"ingredient_id" validate:"required"`
|
||
|
|
GrossQty float64 `json:"gross_qty" validate:"required,gt=0"`
|
||
|
|
NetQty float64 `json:"net_qty" validate:"required,gt=0"`
|
||
|
|
WasteQty float64 `json:"waste_qty" validate:"min=0"`
|
||
|
|
Unit string `json:"unit" validate:"required,max=50"`
|
||
|
|
TransactionDate *time.Time `json:"transaction_date,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type UpdateOrderIngredientTransactionRequest struct {
|
||
|
|
GrossQty *float64 `json:"gross_qty,omitempty" validate:"omitempty,gt=0"`
|
||
|
|
NetQty *float64 `json:"net_qty,omitempty" validate:"omitempty,gt=0"`
|
||
|
|
WasteQty *float64 `json:"waste_qty,omitempty" validate:"min=0"`
|
||
|
|
Unit *string `json:"unit,omitempty" validate:"omitempty,max=50"`
|
||
|
|
TransactionDate *time.Time `json:"transaction_date,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderIngredientTransactionResponse struct {
|
||
|
|
ID uuid.UUID `json:"id"`
|
||
|
|
OrganizationID uuid.UUID `json:"organization_id"`
|
||
|
|
OutletID *uuid.UUID `json:"outlet_id"`
|
||
|
|
OrderID uuid.UUID `json:"order_id"`
|
||
|
|
OrderItemID *uuid.UUID `json:"order_item_id"`
|
||
|
|
ProductID uuid.UUID `json:"product_id"`
|
||
|
|
ProductVariantID *uuid.UUID `json:"product_variant_id"`
|
||
|
|
IngredientID uuid.UUID `json:"ingredient_id"`
|
||
|
|
GrossQty float64 `json:"gross_qty"`
|
||
|
|
NetQty float64 `json:"net_qty"`
|
||
|
|
WasteQty float64 `json:"waste_qty"`
|
||
|
|
Unit string `json:"unit"`
|
||
|
|
TransactionDate time.Time `json:"transaction_date"`
|
||
|
|
CreatedBy uuid.UUID `json:"created_by"`
|
||
|
|
CreatedAt time.Time `json:"created_at"`
|
||
|
|
UpdatedAt time.Time `json:"updated_at"`
|
||
|
|
|
||
|
|
// Relations - these would be populated by the service layer
|
||
|
|
Organization interface{} `json:"organization,omitempty"`
|
||
|
|
Outlet interface{} `json:"outlet,omitempty"`
|
||
|
|
Order interface{} `json:"order,omitempty"`
|
||
|
|
OrderItem interface{} `json:"order_item,omitempty"`
|
||
|
|
Product interface{} `json:"product,omitempty"`
|
||
|
|
ProductVariant interface{} `json:"product_variant,omitempty"`
|
||
|
|
Ingredient interface{} `json:"ingredient,omitempty"`
|
||
|
|
CreatedByUser interface{} `json:"created_by_user,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type ListOrderIngredientTransactionsRequest struct {
|
||
|
|
OrderID *uuid.UUID `json:"order_id,omitempty"`
|
||
|
|
OrderItemID *uuid.UUID `json:"order_item_id,omitempty"`
|
||
|
|
ProductID *uuid.UUID `json:"product_id,omitempty"`
|
||
|
|
ProductVariantID *uuid.UUID `json:"product_variant_id,omitempty"`
|
||
|
|
IngredientID *uuid.UUID `json:"ingredient_id,omitempty"`
|
||
|
|
StartDate *time.Time `json:"start_date,omitempty"`
|
||
|
|
EndDate *time.Time `json:"end_date,omitempty"`
|
||
|
|
Page int `json:"page" validate:"min=1"`
|
||
|
|
Limit int `json:"limit" validate:"min=1,max=100"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderIngredientTransactionSummary struct {
|
||
|
|
IngredientID uuid.UUID `json:"ingredient_id"`
|
||
|
|
IngredientName string `json:"ingredient_name"`
|
||
|
|
TotalGrossQty float64 `json:"total_gross_qty"`
|
||
|
|
TotalNetQty float64 `json:"total_net_qty"`
|
||
|
|
TotalWasteQty float64 `json:"total_waste_qty"`
|
||
|
|
WastePercentage float64 `json:"waste_percentage"`
|
||
|
|
Unit string `json:"unit"`
|
||
|
|
}
|