Update users

This commit is contained in:
Aditya Siregar
2025-08-03 22:44:27 +07:00
parent 96743cf50b
commit ebe9999793
60 changed files with 3254 additions and 140 deletions
+66
View File
@@ -0,0 +1,66 @@
package models
import (
"time"
"github.com/google/uuid"
)
type Ingredient struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name"`
UnitID uuid.UUID `json:"unit_id"`
Cost float64 `json:"cost"`
Stock float64 `json:"stock"`
IsSemiFinished bool `json:"is_semi_finished"`
IsActive bool `json:"is_active"`
Metadata map[string]any `json:"metadata"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
Unit *Unit `json:"unit,omitempty"`
}
type CreateIngredientRequest struct {
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name" validate:"required,min=1,max=255"`
UnitID uuid.UUID `json:"unit_id" validate:"required"`
Cost float64 `json:"cost" validate:"min=0"`
Stock float64 `json:"stock" validate:"min=0"`
IsSemiFinished bool `json:"is_semi_finished"`
IsActive bool `json:"is_active"`
Metadata map[string]any `json:"metadata"`
}
type UpdateIngredientRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name" validate:"required,min=1,max=255"`
UnitID uuid.UUID `json:"unit_id" validate:"required"`
Cost float64 `json:"cost" validate:"min=0"`
Stock float64 `json:"stock" validate:"min=0"`
IsSemiFinished bool `json:"is_semi_finished"`
IsActive bool `json:"is_active"`
Metadata map[string]any `json:"metadata"`
}
type IngredientResponse struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name"`
UnitID uuid.UUID `json:"unit_id"`
Cost float64 `json:"cost"`
Stock float64 `json:"stock"`
IsSemiFinished bool `json:"is_semi_finished"`
IsActive bool `json:"is_active"`
Metadata map[string]any `json:"metadata"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
Unit *Unit `json:"unit,omitempty"`
}
+49
View File
@@ -0,0 +1,49 @@
package models
import (
"time"
"github.com/google/uuid"
)
type IngredientComposition struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
ParentIngredientID uuid.UUID `json:"parent_ingredient_id"`
ChildIngredientID uuid.UUID `json:"child_ingredient_id"`
Quantity float64 `json:"quantity"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
ParentIngredient *Ingredient `json:"parent_ingredient,omitempty"`
ChildIngredient *Ingredient `json:"child_ingredient,omitempty"`
}
type CreateIngredientCompositionRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
ParentIngredientID uuid.UUID `json:"parent_ingredient_id" validate:"required"`
ChildIngredientID uuid.UUID `json:"child_ingredient_id" validate:"required"`
Quantity float64 `json:"quantity" validate:"required,gt=0"`
}
type UpdateIngredientCompositionRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
Quantity float64 `json:"quantity" validate:"required,gt=0"`
}
type IngredientCompositionResponse struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
ParentIngredientID uuid.UUID `json:"parent_ingredient_id"`
ChildIngredientID uuid.UUID `json:"child_ingredient_id"`
Quantity float64 `json:"quantity"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
ParentIngredient *Ingredient `json:"parent_ingredient,omitempty"`
ChildIngredient *Ingredient `json:"child_ingredient,omitempty"`
}
+8 -4
View File
@@ -37,7 +37,8 @@ type InventoryMovement struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
ProductID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
PreviousQuantity int
@@ -58,7 +59,8 @@ type InventoryMovement struct {
type CreateInventoryMovementRequest struct {
OrganizationID uuid.UUID
OutletID uuid.UUID
ProductID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
UnitCost float64
@@ -76,7 +78,8 @@ type InventoryMovementResponse struct {
ID uuid.UUID
OrganizationID uuid.UUID
OutletID uuid.UUID
ProductID uuid.UUID
ItemID uuid.UUID
ItemType string
MovementType InventoryMovementType
Quantity int
PreviousQuantity int
@@ -98,7 +101,8 @@ type InventoryMovementResponse struct {
type ListInventoryMovementsRequest struct {
OrganizationID *uuid.UUID
OutletID *uuid.UUID
ProductID *uuid.UUID
ItemID *uuid.UUID
ItemType *string
MovementType *InventoryMovementType
ReferenceType *InventoryMovementReferenceType
ReferenceID *uuid.UUID
+18 -10
View File
@@ -19,6 +19,8 @@ type Product struct {
BusinessType constants.BusinessType
ImageURL *string
PrinterType string
UnitID *uuid.UUID
HasIngredients bool
Metadata map[string]interface{}
IsActive bool
CreatedAt time.Time
@@ -47,6 +49,8 @@ type CreateProductRequest struct {
BusinessType constants.BusinessType `validate:"required"`
ImageURL *string `validate:"omitempty,max=500"`
PrinterType *string `validate:"omitempty,max=50"`
UnitID *uuid.UUID `validate:"omitempty"`
HasIngredients bool `validate:"omitempty"`
Metadata map[string]interface{}
Variants []CreateProductVariantRequest `validate:"omitempty,dive"`
// Stock management fields
@@ -56,16 +60,18 @@ type CreateProductRequest struct {
}
type UpdateProductRequest struct {
CategoryID *uuid.UUID
SKU *string `validate:"omitempty,max=100"`
Name *string `validate:"omitempty,min=1,max=255"`
Description *string `validate:"omitempty,max=1000"`
Price *float64 `validate:"omitempty,min=0"`
Cost *float64 `validate:"omitempty,min=0"`
ImageURL *string `validate:"omitempty,max=500"`
PrinterType *string `validate:"omitempty,max=50"`
Metadata map[string]interface{}
IsActive *bool
CategoryID *uuid.UUID `validate:"omitempty"`
SKU *string `validate:"omitempty,max=100"`
Name *string `validate:"omitempty,min=1,max=255"`
Description *string `validate:"omitempty,max=1000"`
Price *float64 `validate:"omitempty,min=0"`
Cost *float64 `validate:"omitempty,min=0"`
ImageURL *string `validate:"omitempty,max=500"`
PrinterType *string `validate:"omitempty,max=50"`
UnitID *uuid.UUID `validate:"omitempty"`
HasIngredients *bool `validate:"omitempty"`
Metadata map[string]interface{}
IsActive *bool
// Stock management fields
ReorderLevel *int `validate:"omitempty,min=0"` // Update reorder level for all existing inventory records
}
@@ -97,6 +103,8 @@ type ProductResponse struct {
BusinessType constants.BusinessType
ImageURL *string
PrinterType string
UnitID *uuid.UUID
HasIngredients bool
Metadata map[string]interface{}
IsActive bool
CreatedAt time.Time
+49
View File
@@ -0,0 +1,49 @@
package models
import (
"time"
"github.com/google/uuid"
)
type ProductIngredient struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
ProductID uuid.UUID `json:"product_id"`
IngredientID uuid.UUID `json:"ingredient_id"`
Quantity float64 `json:"quantity"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
Product *Product `json:"product,omitempty"`
Ingredient *Ingredient `json:"ingredient,omitempty"`
}
type CreateProductIngredientRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
ProductID uuid.UUID `json:"product_id" validate:"required"`
IngredientID uuid.UUID `json:"ingredient_id" validate:"required"`
Quantity float64 `json:"quantity" validate:"required,gt=0"`
}
type UpdateProductIngredientRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
Quantity float64 `json:"quantity" validate:"required,gt=0"`
}
type ProductIngredientResponse struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
ProductID uuid.UUID `json:"product_id"`
IngredientID uuid.UUID `json:"ingredient_id"`
Quantity float64 `json:"quantity"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
// Relations
Product *Product `json:"product,omitempty"`
Ingredient *Ingredient `json:"ingredient,omitempty"`
}
+44
View File
@@ -0,0 +1,44 @@
package models
import (
"time"
"github.com/google/uuid"
)
type Unit struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name"`
Abbreviation *string `json:"abbreviation"`
IsActive bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type CreateUnitRequest struct {
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name" validate:"required,min=1,max=50"`
Abbreviation *string `json:"abbreviation" validate:"omitempty,max=10"`
IsActive bool `json:"is_active"`
}
type UpdateUnitRequest struct {
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name" validate:"required,min=1,max=50"`
Abbreviation *string `json:"abbreviation" validate:"omitempty,max=10"`
IsActive bool `json:"is_active"`
}
type UnitResponse struct {
ID uuid.UUID `json:"id"`
OrganizationID uuid.UUID `json:"organization_id"`
OutletID *uuid.UUID `json:"outlet_id"`
Name string `json:"name"`
Abbreviation *string `json:"abbreviation"`
IsActive bool `json:"is_active"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}