# 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 ` 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. --- ## Room Reservations ### Get All Rooms Retrieves a list of all available rooms. - **URL:** `/api/room-reservations/rooms` - **Method:** `GET` - **Response:** Array of room objects. ### Create Room Creates a new room. - **URL:** `/api/room-reservations/rooms` - **Method:** `POST` - **Authentication:** Required (Admin) - **Body:** - `name` (string, required): The name of the room. - `capacity` (number, required): The capacity of the room. - `description` (string, optional): A description of the room. - **Response:** Created room object. ### Update Room Updates an existing room. - **URL:** `/api/room-reservations/rooms` - **Method:** `PUT` - **Authentication:** Required (Admin) - **Body:** - `id` (number, required): The ID of the room to update. - `name` (string, optional): The new name. - `capacity` (number, optional): The new capacity. - `description` (string, optional): The new description. - **Response:** Updated room object. ### Delete Room Deletes a room. - **URL:** `/api/room-reservations/rooms` - **Method:** `DELETE` - **Authentication:** Required (Admin) - **Body:** - `id` (number, required): The ID of the room to delete. - **Response:** `{"message": "Room deleted"}` ### Get All Reservations Retrieves a list of all room reservations, preloading room details. - **URL:** `/api/room-reservations/reservations` - **Method:** `GET` - **Response:** Array of reservation objects. ### Create Reservation Creates a new room reservation. - **URL:** `/api/room-reservations/reservations` - **Method:** `POST` - **Authentication:** Required (Admin) - **Body:** - `roomId` (number, required): The ID of the room. - `customerName` (string, required): The name of the customer. - `customerPhone` (string, required): The phone number of the customer. - `guestsCount` (number, required): Number of guests. - `startsAt` (string, required): Start time (ISO 8601). - `endsAt` (string, required): End time (ISO 8601). - `notes` (string, optional): Additional notes. - **Response:** Created reservation object. ### Update Reservation Updates an existing reservation. - **URL:** `/api/room-reservations/reservations` - **Method:** `PUT` - **Authentication:** Required (Admin) - **Body:** - `id` (number, required): The ID of the reservation to update. - `roomId` (number, optional): The new room ID. - `customerName` (string, optional): The new customer name. - `customerPhone` (string, optional): The new customer phone. - `guestsCount` (number, optional): The new guests count. - `startsAt` (string, optional): The new start time. - `endsAt` (string, optional): The new end time. - `status` (string, optional): The new status ('confirmed' or 'cancelled'). - `notes` (string, optional): New notes. - **Response:** Updated reservation object. ### Delete Reservation Deletes a reservation. - **URL:** `/api/room-reservations/reservations` - **Method:** `DELETE` - **Authentication:** Required (Admin) - **Body:** - `id` (number, required): The ID of the reservation to delete. - **Response:** `{"message": "Reservation deleted"}` --- ## 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.