From 044a2856cf4fbe9618d62f8f621b90eef4ab0f97 Mon Sep 17 00:00:00 2001 From: Natthapol SERMSARAN Date: Sat, 29 Mar 2025 19:11:22 +0700 Subject: [PATCH] feat: add inventory domain --- backend/internal/domain/inventory.go | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 backend/internal/domain/inventory.go diff --git a/backend/internal/domain/inventory.go b/backend/internal/domain/inventory.go new file mode 100644 index 0000000..ecd6169 --- /dev/null +++ b/backend/internal/domain/inventory.go @@ -0,0 +1,61 @@ +package domain + +import ( + "context" + "time" + + validation "github.com/go-ozzo/ozzo-validation/v4" +) + +type InventoryStatus string + +const ( + StatusInStock InventoryStatus = "In Stock" + StatusLowStock InventoryStatus = "Low Stock" + StatusOutOfStock InventoryStatus = "Out of Stock" +) + +type InventoryItem struct { + ID string + Name string + Category string + Type string + Quantity float64 + Unit string + DateAdded time.Time + Status InventoryStatus + CreatedAt time.Time + UpdatedAt time.Time +} + +type InventoryFilter struct { + Category string + Type string + Status InventoryStatus + StartDate time.Time + EndDate time.Time + SearchQuery string +} + +type InventorySort struct { + Field string + Direction string +} + +func (i *InventoryItem) Validate() error { + return validation.ValidateStruct(i, + validation.Field(&i.Name, validation.Required), + validation.Field(&i.Category, validation.Required), + validation.Field(&i.Type, validation.Required), + validation.Field(&i.Quantity, validation.Required, validation.Min(0.0)), + validation.Field(&i.Unit, validation.Required), + validation.Field(&i.Status, validation.Required, validation.In(StatusInStock, StatusLowStock, StatusOutOfStock)), + ) +} + +type InventoryRepository interface { + GetByID(ctx context.Context, id string) (InventoryItem, error) + GetWithFilter(ctx context.Context, filter InventoryFilter, sort InventorySort) ([]InventoryItem, error) + CreateOrUpdate(ctx context.Context, item *InventoryItem) error + Delete(ctx context.Context, id string) error +}