Skip to content

behemoth-13/gpsolutions-1-module-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

###Cистема бронирования билетов на сеанс в кино (rest приложение) ###

Задание

Требуется следующий функционал:

  • просмотреть расписание;
  • забронировать одно или несколько мест на сеансе;
  • отменить бронь;
  • получить информацию по номеру своего заказа.

Без использования сторонних баз данных, расписание загружается из файла, в другом файле хранятся брони. Технологии любые (java), без графического интерфейса.

Реализация

Использованы технологии:

  • Jersey RESTful Web Services framework;
  • Jackson JSON Java Parser;
  • Maven.

Сущности:

  • Сеанс (Show);
  • Место в кинозале (Place);
  • Бронь (Reservation).

Сеанс (Show)

Поля сущности:

  • дата (String date);
  • время (String time);
  • фильм (String film).

Предполагается что есть 1 кинотеатр и разные залы, в которых в одно время могут идти только разные фильмы.

Место в кинозале (Place)

Поля сущности:

  • место (int seat);
  • ряд (int row).

В кинозале 20 мест 7 рядов.

Бронь (Reservation)

Поля сущности:

  • номер заказа(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

если произошла ошибка, то возвращается "нулевой" заказ с указанием произошедшей внутренней ошибой, на основании которой можно скорректировать запрос

About

RESTful jersey jackson

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages