feat: Implement Category, Item, UOM, Vendor, and Warehouse services with CRUD operations

- Added CategoryService for managing categories with listing, tree structure, and creation functionalities.
- Introduced ItemService for item management, including listing, detail retrieval, creation, updating, and status management.
- Created UomService for handling unit of measure operations, including listing and creation.
- Developed VendorService for vendor management, supporting listing, detail retrieval, creation, updating, and status management.
- Implemented WarehouseService for warehouse and bin management, including listing warehouses, creating warehouses, and managing bins within warehouses.
- Added interfaces for each service to define the contract for service implementations.
- Generated Entity Framework Core model snapshot for database migrations.
This commit is contained in:
2026-07-10 10:44:30 +05:30
parent ec94bac410
commit 057dd5aedc
54 changed files with 3437 additions and 18 deletions
+14 -1
View File
@@ -3,12 +3,25 @@ namespace ERPCore.System.Errors;
/// <summary>
/// Stable domain error codes carried in the <c>code</c> extension of RFC 7807
/// ProblemDetails responses. The authoritative catalog lives in
/// docs/11-BACKEND-PHASE1.md; add codes here as endpoints are implemented so
/// docs/11-BACKEND-PHASE1.md §7; add codes here as endpoints are implemented so
/// the two stay in sync.
/// </summary>
public static class ErrorCodes
{
// Generic (framework-level) helpers used by the exception types below.
public const string Validation = "validation_error";
public const string NotFound = "not_found";
public const string Conflict = "conflict";
// Catalog (docs/11 §7) — exact strings surfaced to clients.
public const string SkuDuplicate = "SKU_DUPLICATE";
public const string MasterInUse = "MASTER_IN_USE";
public const string PoNotEditable = "PO_NOT_EDITABLE";
public const string OverReceiptTolerance = "OVER_RECEIPT_TOLERANCE";
public const string StockNegativeBlocked = "STOCK_NEGATIVE_BLOCKED";
public const string ExpiredBatchBlocked = "EXPIRED_BATCH_BLOCKED";
public const string OnHoldNotIssuable = "ONHOLD_NOT_ISSUABLE";
public const string ReasonCodeRequired = "REASON_CODE_REQUIRED";
public const string ConcurrencyConflict = "CONCURRENCY_CONFLICT";
public const string IdempotencyReplay = "IDEMPOTENCY_REPLAY";
}