Files
paprika-api/API_DOCS.md
T
2026-03-29 11:18:31 +02:00

313 lines
9.3 KiB
Markdown

# Paprika API Documentation
The Paprika API provides endpoints for user authentication, managing restaurant menus, and menu items.
## Base URL
The base URL for the API is `http://localhost:3333` (default for AdonisJS development).
## Authentication
Authentication is handled via Bearer tokens. Include `Authorization: Bearer <token>` in the headers for protected routes.
### Register
Registers a new user.
- **URL:** `/api/register`
- **Method:** `POST`
- **Body:**
- `email` (string, required): The user's email address.
- `password` (string, required): The user's password.
- `fullName` (string, optional): The user's full name.
- **Response:** User access token object.
### Login
Authenticates a user and returns an access token.
- **URL:** `/api/login`
- **Method:** `POST`
- **Body:**
- `email` (string, required): The user's email address.
- `password` (string, required): The user's password.
- **Response:** User access token object.
### Logout
Logs out the current user by deleting the access token.
- **URL:** `/api/logout`
- **Method:** `DELETE`
- **Authentication:** Required
- **Response:** `{"message": "User logged out"}`
### Get Me
Retrieves information about the currently authenticated user.
- **URL:** `/api/me`
- **Method:** `GET`
- **Authentication:** Required
- **Response:** `{"user": { ...user data... }}` or `{"message": "Unauthorized"}`
---
## Restaurant Menus
### Get All Menus
Retrieves all restaurant menus, preloading items and their categories.
- **URL:** `/api/menus`
- **Method:** `GET`
- **Response:** Array of menu objects.
### Get One Menu
Retrieves a single restaurant menu by ID, preloading items and their categories.
- **URL:** `/api/menus`
- **Method:** `POST`
- **Body:**
- `id` (number, required): The ID of the menu to retrieve.
- **Response:** Menu object.
### Create Menu
Creates a new restaurant menu.
- **URL:** `/api/menus/create`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Body:**
- `name` (string, required): The name of the menu (e.g., "2025.09.08. Hétfő").
- `nameHu` (string, optional): Hungarian translation of the menu name.
- `nameEn` (string, optional): English translation of the menu name.
- **Response:** Created menu object.
### Update Menu
Updates an existing restaurant menu.
- **URL:** `/api/menus`
- **Method:** `PUT`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the menu to update.
- `name` (string, optional): The new name of the menu.
- `nameHu` (string, optional): The new Hungarian name of the menu.
- `nameEn` (string, optional): The new English name of the menu.
- **Response:** Updated menu object.
### Delete Menu
Deletes a restaurant menu and detaches all connected menu items.
- **URL:** `/api/menus`
- **Method:** `DELETE`
- **Authentication:** Required (Admin)
- **Rate Limited:** Yes
- **Body:**
- `id` (number, required): The ID of the menu to delete.
- **Response:** `{"message": "Menu deleted"}` or error.
---
## Restaurant Menu Items
### Get All Menu Items
Retrieves all restaurant menu items, preloading category and menus.
- **URL:** `/api/menu-items`
- **Method:** `GET`
- **Response:** Array of menu item objects.
### Get One Menu Item
Retrieves a single restaurant menu item by ID, preloading category and menus.
- **URL:** `/api/menu-items`
- **Method:** `POST`
- **Body:**
- `id` (number, required): The ID of the menu item to retrieve.
- **Response:** Menu item object.
### Create Menu Item
Creates a new restaurant menu item. Note: This item must be manually attached to a menu using the `/api/menu-items/attach` endpoint.
- **URL:** `/api/menu-items/create`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Body:**
- `name` (string, required): The name of the menu item.
- `nameHu` (string, required): Hungarian translation of the item name.
- `nameEn` (string, required): English translation of the item name.
- `priceSmall` (number, required): The price for a small serving.
- `priceLarge` (number, required): The price for a large serving.
- `description` (string, optional): General description of the menu item.
- `descriptionHu` (string, optional): Hungarian translation of the description.
- `descriptionEn` (string, optional): English translation of the description.
- `categoryId` (number, optional): The ID of the category this item belongs to.
- **Response:** Created menu item object.
### Update Menu Item
Updates an existing restaurant menu item.
- **URL:** `/api/menu-items`
- **Method:** `PUT`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the menu item to update.
- `name` (string, optional): The new name.
- `nameHu` (string, optional): The new Hungarian name.
- `nameEn` (string, optional): The new English name.
- `priceSmall` (number, optional): The new price for small.
- `priceLarge` (number, optional): The new price for large.
- `description` (string, optional): The new description.
- `descriptionHu` (string, optional): The new Hungarian description.
- `descriptionEn` (string, optional): The new English description.
- `categoryId` (number, optional): The new category ID.
- **Response:** Updated menu item object.
### Attach Menu Item to Menu
Connects an existing menu item to a menu (many-to-many relationship).
- **URL:** `/api/menu-items/attach`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Rate Limited:** No
- **Body:**
- `item_id` (number, required): The ID of the menu item to attach.
- `menu_id` (number, required): The ID of the menu to attach the item to.
- **Response:** `{"message": "Menu item connected to menu"}`
### Delete Menu Item
Deletes a restaurant menu item and detaches it from all menus.
- **URL:** `/api/menu-items`
- **Method:** `DELETE`
- **Authentication:** Required (Admin)
- **Rate Limited:** Yes
- **Body:**
- `id` (number, required): The ID of the menu item to delete.
- **Response:** `{"message": "Menu item deleted"}` or error.
---
## Users (Administrators Only)
### Get All Users
Retrieves all users.
- **URL:** `/api/users`
- **Method:** `GET`
- **Authentication:** Required (Admin)
- **Response:** Array of user objects.
### Get One User
Retrieves a single user by ID.
- **URL:** `/api/users/get-one`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the user to retrieve.
- **Response:** User object.
### Update User
Updates an existing user.
- **URL:** `/api/users`
- **Method:** `PUT`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the user to update.
- `email` (string, optional): The new email of the user.
- `fullName` (string, optional): The new full name of the user.
- `role` (string, optional): The new role of the user (e.g., 'user', 'admin').
- **Response:** Updated user object.
### Delete User
Deletes a user.
- **URL:** `/api/users`
- **Method:** `DELETE`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the user to delete.
- **Response:** `{"message": "User deleted"}` or success.
---
## Categories
### Get All Categories
Retrieves all categories.
- **URL:** `/api/categories`
- **Method:** `GET`
- **Response:** Array of category objects.
### Get One Category
Retrieves a single category by ID.
- **URL:** `/api/categories`
- **Method:** `POST`
- **Body:**
- `id` (number, required): The ID of the category to retrieve.
- **Response:** Category object.
### Create Category
Creates a new category.
- **URL:** `/api/categories/create`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Body:**
- `name` (string, required): The name of the category.
- `nameHu` (string, optional): Hungarian translation of the name.
- `nameEn` (string, optional): English translation of the name.
- `slug` (string, required): The slug of the category.
- **Response:** Created category object.
### Update Category
Updates an existing category.
- **URL:** `/api/categories`
- **Method:** `PUT`
- **Authentication:** Required (Admin)
- **Body:**
- `id` (number, required): The ID of the category to update.
- `name` (string, optional): The new name.
- `nameHu` (string, optional): The new Hungarian name.
- `nameEn` (string, optional): The new English name.
- `slug` (string, optional): The new slug.
- **Response:** Updated category object.
### Delete Category
Deletes a category.
- **URL:** `/api/categories`
- **Method:** `DELETE`
- **Authentication:** Required (Admin)
- **Rate Limited:** Yes
- **Body:**
- `id` (number, required): The ID of the category to delete.
- **Response:** `{"message": "Category deleted"}` or error.
---
## Images
### Upload Image
Uploads an image for menu items or categories. Supported extensions: jpg, jpeg, png, webp, gif. Max size: 10mb.
- **URL:** `/api/images/upload`
- **Method:** `POST`
- **Authentication:** Required (Admin)
- **Body:**
- `image` (file, required): The image file to upload.
- **Response:** `{"filename": "...", "url": "..."}`
### Show Image
Retrieves and displays a previously uploaded image.
- **URL:** `/api/images/:filename`
- **Method:** `GET`
- **Response:** Image stream with correct MIME type.
---
## Rate Limiting
Some endpoints (like login, registration, and deletion) are protected by rate limiting to prevent abuse. If you receive a `429 Too Many Requests` response, please wait before trying again.