1. API Purpose
The Food Menu API communicates the school cafeteria’s schedule and nutrition details to parents. It helps parents stay informed about their child’s tiffin/meal plans and supports dietary management.2. Endpoint Definition
| Method | Route | Auth | Description |
|---|---|---|---|
| GET | /parent-app/food-menu | 🔐 JWT | View daily/weekly food menu |
| GET | /web-app/food-menu | 🔐 JWT | List all menu definitions |
| GET | /web-app/food-menu/:id | 🔐 JWT | View single menu detail |
| POST | /web-app/food-menu | 🔐 JWT | Create new food menu item |
| PUT | /web-app/food-menu/:id | 🔐 JWT | Update menu item details |
| DELETE | /web-app/food-menu/:id | 🔐 JWT | Delete a menu item |
| POST | /web-app/bulk-import-food-menu | 🔐 JWT | Bulk import from Excel/CSV |
| POST | /web-app/bulk-import-food-menu-json | 🔐 JWT | Bulk import from JSON |
3. Authentication Flow
Standard JWT validation.- Parents can only view the menu for their school.
- Staff require
food.managepermissions to update the menu or schedule.
4. Request Structure
GET /parent-app/food-menu
Query Parameters:| Field | Type | Required | Description |
|---|---|---|---|
| day | string | No | Filter by day (e.g., Monday). |
| period | string | No | Filter by period (e.g., Breakfast). |
GET /web-app/food-menu
Query Parameters:| Field | Type | Required | Description |
|---|---|---|---|
| skole_id | string | Yes | School identifier. |
| menu_day | string | No | Filter by day. |
| period | string | No | Filter by period. |
GET /web-app/food-menu/:id
URL Parameters:| Field | Type | Description |
|---|---|---|
| id | number | ID of the food menu record. |
POST /web-app/food-menu
Request Body:PUT /web-app/food-menu/:id
Request Body:DELETE /web-app/food-menu/:id
URL Parameters:| Field | Type | Description |
|---|---|---|
| id | number | ID to delete. |
POST /web-app/bulk-import-food-menu-json
Request Body:POST /web-app/bulk-import-food-menu
Content-Type:multipart/form-data
Query Parameters: skole_id=SKL001
File: Upload .xlsx or .csv file.
5. Response Structure
Success: Parent Menu View (200 OK)
Route:GET /parent-app/food-menu
Success: Admin Menu List (200 OK)
Route:GET /web-app/food-menu
Success: Single Item Detail (200 OK)
Route:GET /web-app/food-menu/:id
Success: Menu Created (201 Created)
Route:POST /web-app/food-menu
Success: Bulk Import Results (200 OK)
Route:POST /web-app/bulk-import-food-menu-json
Success: Item Deleted (200 OK)
Route:DELETE /web-app/food-menu/:id
6. Error Responses
| HTTP Code | Description |
|---|---|
| 400 | Invalid menu_day or period value |
7. Security Considerations
- Tenant Isolation: Menus are strictly scoped by
skole_id. - Status Toggle: Inactive menus are automatically filtered out of the parent app view.
8. Token Usage
9. Token Refresh
N/A.10. Logout / Session Invalidation
N/A.11. Usage Example (cURL)
12. Notes / Special Behaviors
- Scheduling: The menu system separates “Menu Definitions” (what the food is) from “Schedules” (when it is served).
- Nutrients: Information is provided as a plain text summary for parent reference.