Files

13 KiB

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

List Images

Retrieves a list of all uploaded images.

  • URL: /api/images
  • Method: GET
  • Authentication: Required (Admin)
  • Response: [{"filename": "...", "url": "...", "thumbnailUrl": "..."}]

Upload Image

Uploads an image for menu items or categories. Supported extensions: jpg, jpeg, png, webp, gif. Max size: 10mb. Automatically generates a 200px wide thumbnail.

  • URL: /api/images/upload
  • Method: POST
  • Authentication: Required (Admin)
  • Body:
    • image (file, required): The image file to upload.
  • Response: {"filename": "...", "url": "...", "thumbnailUrl": "..."}

Show Image

Retrieves and displays a previously uploaded image.

  • URL: /api/images/:filename
  • Method: GET
  • Query Parameters:
    • type (string, optional): Use thumbnail to retrieve the 200px wide thumbnail.
  • 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.