package contract import ( "time" "github.com/google/uuid" ) type CreateProductRequest struct { CategoryID uuid.UUID `json:"category_id" validate:"required"` SKU *string `json:"sku,omitempty"` Name string `json:"name" validate:"required,min=1,max=255"` Description *string `json:"description,omitempty"` Price float64 `json:"price" validate:"required,min=0"` Cost *float64 `json:"cost,omitempty" validate:"omitempty,min=0"` BusinessType *string `json:"business_type,omitempty"` ImageURL *string `json:"image_url,omitempty" validate:"omitempty,max=500"` PrinterType *string `json:"printer_type,omitempty" validate:"omitempty,max=50"` Metadata map[string]interface{} `json:"metadata,omitempty"` IsActive *bool `json:"is_active,omitempty"` Variants []CreateProductVariantRequest `json:"variants,omitempty"` InitialStock *int `json:"initial_stock,omitempty" validate:"omitempty,min=0"` // Initial stock quantity for all outlets ReorderLevel *int `json:"reorder_level,omitempty" validate:"omitempty,min=0"` // Reorder level for all outlets CreateInventory bool `json:"create_inventory,omitempty"` // Whether to create inventory records for all outlets } type UpdateProductRequest struct { CategoryID *uuid.UUID `json:"category_id,omitempty"` SKU *string `json:"sku,omitempty"` Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=255"` Description *string `json:"description,omitempty"` Price *float64 `json:"price,omitempty" validate:"omitempty,min=0"` Cost *float64 `json:"cost,omitempty" validate:"omitempty,min=0"` BusinessType *string `json:"business_type,omitempty"` ImageURL *string `json:"image_url,omitempty" validate:"omitempty,max=500"` PrinterType *string `json:"printer_type,omitempty" validate:"omitempty,max=50"` Metadata map[string]interface{} `json:"metadata,omitempty"` IsActive *bool `json:"is_active,omitempty"` // Stock management fields ReorderLevel *int `json:"reorder_level,omitempty" validate:"omitempty,min=0"` // Update reorder level for all existing inventory records } type CreateProductVariantRequest struct { ProductID uuid.UUID `json:"product_id" validate:"required"` Name string `json:"name" validate:"required,min=1,max=255"` PriceModifier float64 `json:"price_modifier" validate:"required"` Cost float64 `json:"cost" validate:"min=0"` Metadata map[string]interface{} `json:"metadata,omitempty"` } type UpdateProductVariantRequest struct { Name *string `json:"name,omitempty" validate:"omitempty,min=1,max=255"` PriceModifier *float64 `json:"price_modifier,omitempty"` Cost *float64 `json:"cost,omitempty" validate:"omitempty,min=0"` Metadata map[string]interface{} `json:"metadata,omitempty"` } type ProductResponse struct { ID uuid.UUID `json:"id"` OrganizationID uuid.UUID `json:"organization_id"` CategoryID uuid.UUID `json:"category_id"` SKU *string `json:"sku"` Name string `json:"name"` Description *string `json:"description"` Price float64 `json:"price"` Cost float64 `json:"cost"` BusinessType string `json:"business_type"` ImageURL *string `json:"image_url"` PrinterType string `json:"printer_type"` Metadata map[string]interface{} `json:"metadata"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` Category *CategoryResponse `json:"category,omitempty"` Variants []ProductVariantResponse `json:"variants,omitempty"` } type ProductVariantResponse struct { ID uuid.UUID `json:"id"` ProductID uuid.UUID `json:"product_id"` Name string `json:"name"` PriceModifier float64 `json:"price_modifier"` Cost float64 `json:"cost"` Metadata map[string]interface{} `json:"metadata"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ListProductsRequest struct { OrganizationID *uuid.UUID `json:"organization_id,omitempty"` CategoryID *uuid.UUID `json:"category_id,omitempty"` BusinessType string `json:"business_type,omitempty"` IsActive *bool `json:"is_active,omitempty"` Search string `json:"search,omitempty"` MinPrice *float64 `json:"min_price,omitempty" validate:"omitempty,min=0"` MaxPrice *float64 `json:"max_price,omitempty" validate:"omitempty,min=0"` Page int `json:"page" validate:"required,min=1"` Limit int `json:"limit" validate:"required,min=1,max=100"` } type ListProductsResponse struct { Products []ProductResponse `json:"products"` TotalCount int `json:"total_count"` Page int `json:"page"` Limit int `json:"limit"` TotalPages int `json:"total_pages"` }