Реализовать систему администрирования отеля. Требования к функционалу:
-
Система должна представлять собой web-приложение,
имеющее страницу авторизации и страницу администрирования. -
В БД системы должна иметься таблица пользователей, содержащая логины и хэши паролей.
-
Страница администрирования должна содержать таблицу номеров отеля с возможностью поиска и сортировки по различным полям.
-
Должна иметься операция заселения в номер при которой создается новая запись о посетителе с датой въезда.
-
Должна иметься операция выезда из номера, при которой номер освобождается и подсчитывается оплата в зависимости от типа номера, количества мест и времени.
В отеле имеется определенное количество номеров.
У каждого номера имеется:
- вместимость;
- количество человек, которое может в нем проживать;
- тип: стандартный, полулюкс и люкс;
- состояние - занят или не занят;
- и т.п.
При въезде в номер создается запись в таблице:
- Посетитель: сущность, которая содержит:
- ФИО
- дата въезда,
- дата выезда.
Для системы авторизации должна иметься таблица пользователей, содержащая:
- логин,
- хэш пароля.
Другие сущности могут создаваться на усмотрение.
Система должна быть реализована с использованием ASP.NET Core.
Для системы авторизации необходимо использовать Identity.
Для работы с БД ORM Entity Framework Core.
Желательно проектировать api с учетом REST.
Клиентская сторона (frontend) на усмотрение.
Дополнительный функционал приветствуется.
для каждой команды есть два вызова api - через post, либо через любой другой подходящий по смыслу метод (включая Post);
Post /room/add/
Post /room/
В теле запроса обязателен объект serealized в json:
{
"Number": 1408,
"Capacity": 1,
"Category": "HalfLuxury"
}
Возможные ответы:
- `201`
в теле ответа придёт serealized json объект с указанием id записи;
- `400`
в теле пришедшего запроза нет данных;
- `409`
такая комната уже добавлена;
Post /room/remove/{id:int}
Delete /room/{id:int}
Тела запроса пусто;
Возможные ответы:
- `200`
удаление прошло успешно;
- `404`
нет комнаты с таким `id`;
Post /room/get/{id:int}
Get /room/{id:int}
Тела запроса пусто;
Возможные ответы:
- `200`
удаление прошло успешно;
- `404`
нет комнаты с таким `id`;
Post /room/update/{id:int}
Patch /room/{id:int}
В теле запроса обязателен объект serealized в json, без указания ключевого поля id
; Старая запись будет заменена новой;
{
"Number": 13,
"Capacity": 2,
"Category": "Standart"
}
Возможные ответы:
- `200`
объект обновлён;
- `400`
в теле пришедшего запроза нет данных;
Post /room/all/
Get /room/
Тела запроса желательно оставить пустым;
Возможные ответы:
- `200`
в теле запроса содержится List/Array объектов serealized в Json;
Post /customer/add/
Post /customer/
В теле запроса обязателен объект serealized в json:
{
"FirstName": "allan",
"SecondName": "walpy"
}
Возможные ответы:
- `201`
в теле ответа придёт serealized json объект с указанием id записи;
- `400`
в теле пришедшего запроза нет данных;
- `409`
такой клиент уже добавлен;
Post /customer/remove/{id:int}
Delete /customer/{id:int}
Тела запроса пусто;
Возможные ответы:
- `200`
удаление прошло успешно;
- `404`
нет комнаты с таким `id`;
Post /room/get/{id:int}
Get /room/{id:int}
Тела запроса пусто;
Возможные ответы:
- `200`
удаление прошло успешно;
- `404`
нет комнаты с таким `id`;
Post /customer/update/{id:int}
Patch /customer/{id:int}
В теле запроса обязателен объект serealized в json, без указания ключевого поля id
; Старая запись будет заменена новой;
{
"FirstName": "Allan",
"SecondName": "Walpy",
"ThirdName": "Egorovich"
}
Возможные ответы:
- `200`
объект обновлён;
- `400`
в теле пришедшего запроза нет данных;
Post /customer/all/
Get /customer/
Тела запроса желательно оставить пустым;
Возможные ответы:
- `200`
в теле запроса содержится List/Array объектов serealized в Json;
Post hostel/checkin/{roomId:int}/{customerId:int}
Post hostel/{roomId:int}/{customerId:int}
Тело запроса желательно пустое;
Возможные ответы:
- `201`
человек заселен в номер начиная с текущего момента;
- `409`
комната занята или человек уже поселён в другую комнату;
Post hostel/checkout/{id:int}
Delete hostel/{id:int}
Тело запроса желательно пустое;
В ответе в теле запроса будет json данные с одним полем Price
- стоимости данного проживания;
Возможные ответы:
- `200`
человек выселен из номера начиная с текущего момента;
- `404`
записи об этом заселении в номер нет;
Post hostel/get/{id:int}
Get hostel/{id:int}
Тело запроса желательно пустое;
Возможные ответы:
- `200`
данные выданы в теле ответа в json виде;
- `404`
записи об этом заселении в номер нет;
Post hostel/get/
Get hostel/
Тела запроса желательно оставить пустым;
Возможные ответы:
- `200`
в теле запроса содержится List/Array объектов serealized в Json;