###Cистема бронирования билетов на сеанс в кино (rest приложение) ###
Требуется следующий функционал:
- просмотреть расписание;
- забронировать одно или несколько мест на сеансе;
- отменить бронь;
- получить информацию по номеру своего заказа.
Без использования сторонних баз данных, расписание загружается из файла, в другом файле хранятся брони. Технологии любые (java), без графического интерфейса.
Использованы технологии:
- Jersey RESTful Web Services framework;
- Jackson JSON Java Parser;
- Maven.
Сущности:
- Сеанс (Show);
- Место в кинозале (Place);
- Бронь (Reservation).
Поля сущности:
- дата (String date);
- время (String time);
- фильм (String film).
Предполагается что есть 1 кинотеатр и разные залы, в которых в одно время могут идти только разные фильмы.
Поля сущности:
- место (int seat);
- ряд (int row).
В кинозале 20 мест 7 рядов.
Поля сущности:
- номер заказа(int Id);
- сеанс (Show show);
- места (Set<Place> places).
Валидация данных реализована в слое сервиса (service). При поступлении запроса заказа бронирования проверяется существование сеанса, затем валидность места(мест), если ошибок нет то передается в слой работы с данными(dao). При поступлении запроса на просмотр или удаление заказа проверяется существует ли данный заказ, если "да", то запрос передается дальше -- в dao.
Расписание сеансов находится в файле "schedule.json", путь к файлу указан в константе
class ShowDao private final static String BASE_FILE = "e:\\schedule.json";
Расписание заказов(броней) находится в файле "reservations.json", путь к файлу указан в константе
class ReservationDao private final static String BASE_FILE = "e:\\reservations.json";
Запись и чтение данных с диска осуществляется в слое dao. Для ускорения операции чтения реализован кэш для сеансов и заказов в классах ShowCash и ReservationCash соответственно. ID заказа инициализируется исходя из существующего максимального ID заказа файла "reservations.json" и присваивается с инкрементом (используется потокобезопасный AtomicInteger). При записи заказов данные сохраняются в кэше и файле транзакционно.
Осуществляется в контроллере (Controller).
- Просмотр расписания:
Запрос: GET без параметров
Ответ: множество сеансов(расписание)
- Бронирование места(мест):
Запрос: POST с заказом в качестве параметра
Ответ:
если выполнен, то возвращается заказ с действительным в системе id
если произошла ошибка, то возвращается заказ с указанием произошедшей внутренней ошибой, на основании которой можно скорректировать запрос
- Отмена бронирования:
Запрос: DELETE с номером заказа в качестве параметра
Ответ:
если выполнен, то возвращается код состояния HTTP 200 OK («хорошо»)
если произошла ошибка, то то возвращается код состояния HTTP 500 Internal Server Error («внутренняя ошибка сервера»)
- Получение информации о заказе:
Запрос: GET с номером заказа в качестве параметра
Ответ:
если выполнен, то возвращается заказ с действительным в системе id
если произошла ошибка, то возвращается "нулевой" заказ с указанием произошедшей внутренней ошибой, на основании которой можно скорректировать запрос