Fix inconsistent line endings across all project files for cross-environment consistency. Add complete unit test suite covering core utilities, API routes, and server services. Add Playwright E2E test setup with smoke, auth, and agent API tests. Update all project configuration files to match standardized formatting. Fix MCP API error handling to properly propagate HTTP status codes and use correct JSON-RPC error codes. Add VSCode workspace configuration, extensions, and example MCP config files. Update .gitignore to exclude new test and build artifacts.
55 lines
4.7 KiB
JSON
55 lines
4.7 KiB
JSON
{
|
|
"name": "order_items_v2",
|
|
"type": "base",
|
|
"system": false,
|
|
"listRule": "@request.auth.id != ''",
|
|
"viewRule": "@request.auth.id != ''",
|
|
"createRule": "@request.auth.id != ''",
|
|
"updateRule": "@request.auth.id != ''",
|
|
"deleteRule": "@request.auth.id != ''",
|
|
"fields": [
|
|
{ "name": "order", "type": "relation", "required": true, "options": { "collectionId": "REPLACE_ORDERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
{ "name": "quote_item", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_QUOTE_ITEMS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
{ "name": "purchase_order", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_PURCHASE_ORDERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
{ "name": "supplier", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_SUPPLIERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
{ "name": "drv_id", "type": "relation", "required": false, "options": { "collectionId": "_pb_users_auth_", "maxSelect": 1, "minSelect": null, "displayFields": ["name", "email"] } },
|
|
|
|
{ "name": "description", "type": "text", "required": true, "options": { "min": 1, "max": 5000, "pattern": "" } },
|
|
{ "name": "po_description", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
{ "name": "notes", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
{ "name": "problem_notes", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
|
|
{ "name": "quantity", "type": "number", "required": true, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "order_qty", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "qty_processed", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "qty_assigned", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "qty_collected", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "qty_delivered", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
{ "name": "cost_price", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "selling_price", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
{ "name": "markup", "type": "number", "required": false, "options": { "min": null, "max": null, "noDecimal": false } },
|
|
{ "name": "markup_percent", "type": "number", "required": false, "options": { "min": null, "max": null, "noDecimal": false } },
|
|
|
|
{ "name": "item_status", "type": "select", "required": true, "options": { "maxSelect": 1, "values": ["pending", "processed", "po_generated", "ready_delivery", "delivered", "cancelled"] } },
|
|
{ "name": "drv_status", "type": "select", "required": true, "options": { "maxSelect": 1, "values": ["unassigned", "assigned", "en_route", "collected", "failed"] } },
|
|
{ "name": "delivery_status", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["pending", "ready", "in_transit", "delivered", "failed"] } },
|
|
{ "name": "invoice_status", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["pending", "invoiced", "paid", "cancelled"] } },
|
|
|
|
{ "name": "problem_flag", "type": "bool", "required": false },
|
|
{ "name": "problem_type", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["stock", "supplier", "driver", "delivery", "pricing", "other"] } },
|
|
|
|
{ "name": "drv_assigned_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
{ "name": "drv_collected_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
{ "name": "delivered_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
|
|
{ "name": "legacy_order_item_id", "type": "text", "required": false, "options": { "min": null, "max": 64, "pattern": "" } }
|
|
],
|
|
"indexes": [
|
|
"CREATE INDEX idx_order_items_v2_order ON order_items_v2 (order)",
|
|
"CREATE INDEX idx_order_items_v2_item_status ON order_items_v2 (item_status)",
|
|
"CREATE INDEX idx_order_items_v2_drv_status ON order_items_v2 (drv_status)",
|
|
"CREATE INDEX idx_order_items_v2_supplier ON order_items_v2 (supplier)",
|
|
"CREATE INDEX idx_order_items_v2_drv_id ON order_items_v2 (drv_id)"
|
|
]
|
|
}
|