Семестровая задача

Требуется дописать проект до рабочего состояния

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

Архитектура

Проект спроектирован и разделен на слои Model, Repository, Controller и Service.

  • Model это просто набор POJO классов с аттрибутами геттерами/сеттерами и конструкторами.
  • Repository это классы, которые знаю куда и как записывать данные (БД, файловая система или просто держать в памяти).
  • Controller это классы, которые умеют принимать данные с frontend от юзеров. Их задача проверить полученные данны, валидировать и вызвать соответсвующую бизнес логику в Service классах.
  • Service это классы, которые знают бизнес логику приложения. Они знают что от чего зависит и как использовать Repository.

Общие правила такие:

  • Никакие классы ничего не должны знать о Repository, кроме Service
  • Никакие классы не должны заниматься валидацией данных, кроме Controller
  • Никакие классы не записывают данные, только Repository
  • Никакие классы не используют Service, кроме Controller

Шаги выполнения

В проекте продумана логика и архитектура, но оставлено много пустых методов и классов. Реализацию пишите вы. Также оставлены метки TODO. Это дополнительные задачи, в которых логику продумать придётся вам самим.

Model

В пакете kz.uib.parking.model созданы POJO классы моделей. Вы должны продумать каждую модель, поля, аттрибуты. Создать getter/setter и конструктор

  • Модель User. Хранит данные о юзере
  • Модель Token. Хранит данные о токене и юзере, которому принадлежит токен
  • Модель SecurityCode. Одноразовый код для регистрации.

Controller

В пакете kz.uib.parking.controller созданы классы REST контроллеры. В них нужно написать реализацию ваших API.

  • Все общение через HTTP должно идти на основе JSON ("Content-type:application/json").
  • Все данные должны валидироваться по маске и проверятся на адекватность перед передачей в Service Layer
  • GET методы должны быть идемпотентыми
  • POST метода принимают данные в body

Repository

В пакете kz.uib.parking.repository созданы классы репозитории. Для них созданы и продуманы интерфейсы, но НЕ написаны реализации. Ваша задача написать реализацию каждого репозитория.

  • Репозиторий отвечающий за юзеров
  • Репозиторий отвечающий за токены
  • Репозиторий отвечающий за коды безопасности

Service

Это самая сложная и значимая часть проекта.

В пакете `` созданы классы сервисы. Некоторые методы уже реализованы и не требуют доработки. Некоторые методы частично реализованы, там оставлены TODO. Остальное все без реализации и ваша задача закончить все Service.

  • Сервис регистрации юзера. Здесь бизнес логика регистрации
  • Сервис токенов. Здесь бизнес логика токенов
  • Сервис кодов безопасности. Здесь логика кодов

Бонусы

В пакете kz.uib.parking.exception созданы несколько exception классов. Так как наши Service не занимаются валидацией данных, то единственный способ передать сообщение об ошибках это Exception. В двух сервисах уже вставлены Exception. Ваша задача дополнить и продумать все остальные Exception.