EKAJAYA - PRODUCT
📦 Technical Specification: Product Setup
📋 Feature Overview
🛠️ Technical Implementation
A. Permissions & Access Control
Note: Access is controlled via
PermissionGuard and code-level checks.| Scope | Permission Code | Description & Page Usage |
|---|---|---|
| Menu Visibility | PRODUCT.MENU |
Sidebar menu visibility. |
| Page Access | PRODUCT.LISTING |
Access to listing route.\listing-product-manage |
|
View Access |
PRODUCT.VIEW |
Controls visibility of action buttons (Edit).\listing-product-manage |
|
Create Action |
|
Visibility of the + Add button (uses Update permission). |
| Delete Action | PRODUCT.DELETE |
Visibility of the Delete 🗑️ icon.\listing-product-manage |
| Edit/Save Action | PRODUCT.UPDATE |
Ability to save changes on Add/Edit screen.\add- |
| |
B. API Interaction
Base URL:
${environment.baseApiUrl}1. Retrieve Product List
\listing-product-manageEndpoint
/products/getQuery
Method
POST
Key Params
filter: isDeleted||$eq||0 (plus search on Code, Name, Brand).sort: productBrand,productName2. Delete Product (Soft Delete)
\listing-product-manageEndpoint
/products/update
Method
POST
Prerequisite
Must pass dependency checks (Order & Job) first.
{
"id": Number,
"isDeleted": true
}
3. Get Single Product (Edit Mode)
\add-product-manageEndpoint
/products/getQuery
Method
POST
Query Params
filter: id||$eq||{id}join: supplierProductList, supplierProductList.pickupAddress...\add-product-manageEndpoint
/products/mdCreate
Method
POST
{
"productCode": "String",
"productName": "String",
"productBrand": "String",
"supplierProductList": [
{ "supplierId": Number, "pickupAddressId": Number }
],
"isDeleted": 0
}
\add-product-manageEndpoint
/products/mdUpdate
Method
POST
Payload is same as Create, but includes "id": Number.
\listing-product-manage{ "id": Number, "isDeleted": true }
C. Validation & Business Logic
1. Unique Code Validation \add-product-manage
Trigger:On Save.Logic:Calls/products/getQuery. Filter:productCode||$eq||{inputCode};isDeleted||$eq||0.Error:Blocking error: "Product code already exists".
2. Dependency Checks (Pre-Delete) \listing-product-manage
Before deleting a product, the system ensures it is not currently used in active Orders or Jobs.
| Module | Endpoint | Filter Logic |
|---|---|---|
| 📦 Orders | /orders/getQuery |
productId |
| 🔧 Jobs | /jobs/getQuery |
productId |
Error: "Unable to delete Product due to tagging to [order/job]."
2. Unique Code Validation \add-product-manage
- Trigger: On Save.
- Logic: Calls
/products/getQuery. Filter:productCode||$eq||{inputCode};isDeleted||$eq||0. - Error: Blocking error: "Product code already exists".
3. Minimum Data Requirement \add-product-manage
- Trigger: On Save.
- Logic: Checks
supplierProductListarray. - Error: If list is empty, shows: "Please add product supplier".