From 821ec888822c5bb0fbcd2429f7fae2a635036407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiss=20D=C3=A1vid?= Date: Wed, 1 Apr 2026 12:12:46 +0200 Subject: [PATCH] room reservation added --- API_DOCS.md | 97 ++++++++++++++++++++++++ app/controllers/categories_controller.ts | 6 +- app/controllers/users_controller.ts | 4 +- config/ally.ts | 3 +- database/seeders/user_seeder.ts | 8 +- start/routes.ts | 36 +++++++++ 6 files changed, 145 insertions(+), 9 deletions(-) diff --git a/API_DOCS.md b/API_DOCS.md index ed131d9..832bd3d 100644 --- a/API_DOCS.md +++ b/API_DOCS.md @@ -308,5 +308,102 @@ Retrieves and displays a previously uploaded image. --- +## 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. diff --git a/app/controllers/categories_controller.ts b/app/controllers/categories_controller.ts index d8297e3..b79f6d8 100644 --- a/app/controllers/categories_controller.ts +++ b/app/controllers/categories_controller.ts @@ -10,8 +10,7 @@ export default class CategoriesController { * @returns An array of all categories. */ async getAll() { - const categories = await Category.all() - return categories + return await Category.all() } /** @@ -23,8 +22,7 @@ export default class CategoriesController { async getOne({ request }: HttpContext) { try { const id = request.body().id - const category = await Category.find(id) - return category + return await Category.find(id) } catch (error) { logger.error('Category retrieval failed: %s', error) } diff --git a/app/controllers/users_controller.ts b/app/controllers/users_controller.ts index c37a64a..e682116 100644 --- a/app/controllers/users_controller.ts +++ b/app/controllers/users_controller.ts @@ -10,14 +10,14 @@ export default class UsersController { * @returns An array of all users. */ async getAll() { - const users = await User.all() - return users + return await User.all() } /** * Retrieve a single user. * * @param request - The HTTP context containing the request data. + * @param response - The HTTP context's response object. * @returns The user with the specified id. */ async getOne({ request, response }: HttpContext) { diff --git a/config/ally.ts b/config/ally.ts index 2cf0661..a27e24e 100644 --- a/config/ally.ts +++ b/config/ally.ts @@ -1,6 +1,5 @@ -import { defineConfig, services } from '@adonisjs/ally' +import { defineConfig } from '@adonisjs/ally' import type { InferSocialProviders } from '@adonisjs/ally/types' -import env from '#start/env' const allyConfig = defineConfig({}) diff --git a/database/seeders/user_seeder.ts b/database/seeders/user_seeder.ts index b4b776a..3346eb9 100644 --- a/database/seeders/user_seeder.ts +++ b/database/seeders/user_seeder.ts @@ -5,9 +5,15 @@ export default class extends BaseSeeder { async run() { await User.create({ email: 'kiss.david@test.hu', - password: 'Palacsinta1.', + password: 'Password123', fullName: 'Kiss Dávid', role: 'admin', }) + await User.create({ + email: 'admin@paprikaetterem.net', + password: '1Sziwem1', + fullName: 'Admin', + role: 'admin', + }) } } diff --git a/start/routes.ts b/start/routes.ts index d649795..440c4fa 100755 --- a/start/routes.ts +++ b/start/routes.ts @@ -17,6 +17,7 @@ const RestaurantMenusController = () => import('#controllers/restaurant_menus_co const CategoriesController = () => import('#controllers/categories_controller') const UsersController = () => import('#controllers/users_controller') const ImagesController = () => import('#controllers/images_controller') +const RoomReservationsController = () => import('#controllers/room_reservations_controller') // Auth routes router.group(() => { @@ -132,5 +133,40 @@ router router.get('/:filename', [ImagesController, 'show']).as('images.show') }) .prefix('/images') + + // Room and Reservation routes + router + .group(() => { + // Rooms + router.get('/rooms', [RoomReservationsController, 'listRooms']).as('rooms.list') + router + .post('/rooms', [RoomReservationsController, 'createRoom']) + .as('rooms.create') + .use([middleware.auth(), middleware.admin()]) + router + .put('/rooms', [RoomReservationsController, 'updateRoom']) + .as('rooms.update') + .use([middleware.auth(), middleware.admin()]) + router + .delete('/rooms', [RoomReservationsController, 'deleteRoom']) + .as('rooms.delete') + .use([middleware.auth(), middleware.admin()]) + + // Reservations + router.get('/reservations', [RoomReservationsController, 'index']).as('reservations.index') + router + .post('/reservations', [RoomReservationsController, 'store']) + .as('reservations.store') + .use([middleware.auth(), middleware.admin()]) + router + .put('/reservations', [RoomReservationsController, 'update']) + .as('reservations.update') + .use([middleware.auth(), middleware.admin()]) + router + .delete('/reservations', [RoomReservationsController, 'destroy']) + .as('reservations.destroy') + .use([middleware.auth(), middleware.admin()]) + }) + .prefix('/room-reservations') }) .prefix('/api')