Intellij IDEA, JDK 1.8, Maven, Tomcat 8.5.61
Postgresql, HikariCP, HTML, CSS, Servlet/JSP/JSTL
Файл с настройками для соединения с базой данных: hikari.properties
В resources есть скрипт для создания базы данных с таблицами и готовыми тестовыми запросами для создания департаментов и сотрудников: schema.sql
При запуске открывается страница со списком департаментов с функционалом для этого списка(добавить, удалить, редактировать, показать список сотрудников). Возле каждого департамента есть кнопка для перехода на другую страницу со списком сотрудников, со схожим функционалом.
При создание/редактирование департамента и создания сотрудника можно вернутся на главную страницу, список департаментов При редактирование сотрудника можно вернутся на главную страницу, список департаментов, или список сотрудников департамента, к которому принадлежит редактирующий сотрудник
При попытке удалить данные из таблицы появляется сообщение/предупреждение, которое нужно потвердить для удаления данных из БД
При создание/редактирование сотрудника/департамента есть отдельное окно, в котором будут отображаться ошибки при заполнения формы(неверный формат телефона, почта уже существует в БД и т.д.)
Есть сотрудники и департаменты.
У департамента может быть много сотрудников. А может и не быть.
Реализовано через OneToMany с необязательной связью, с таблицами employee, dept. Сотрудник работает в департаменте, каждый сотрудник существует/работает только в департаменте. Департамент может существовать без сотрудников. Существование сотрудников в департаменте не обязательно.
Есть список департаментов. И есть кнопки "Добавить / Редактировать / Удалить / Список сотрудников".
На сайте, у таблицы департаментов есть столбец с кнопками "Редактировать / Удалить / Список сотрудников" для каждого отдельного департамента. В заголовке столбца есть кнопка добавления департамента.
При нажатии "Список" показываются сотрудники этого департамента с теми же кнопками.
Реализовано так же, как и у списка департаментов. Перед таблицей можно найти ссылку на главную страницу - список департамента.
Список - табличка, страница добавления/редактирования - набор текстфилдов.
Список реализован через таблицу, в коде использован LinkedHashSet. У Department и Employee есть поля, которые уникальны на уровне БД(ключевое слово UNIQUE, id у каждой таблице), повторы невозможны поэтому используем Set вместо List. Используем LinkedHashSet, который поддерживает порядок вставки элементов и имеет быструю скорость/производительность.
Добавление/редактирование реализовано через формы и инпут.
Технологии:
1. БД -jdbc
Использован только JDBC для взаимодействия с БД. Реализованы паттерны DAO, DAO Mapper/Decorator(для избежание повторяющего кода). Для создания пула потоков был использован HikariCP. SQL - Postgresql.
2. Controller – servlet
Использован один общий сервлет, для соответствия паттерна Model-View-Controller. Также реализован шаблон command, в котором реализованы все команды/взаимодействия с сервисом. Каждая команда должна быть реализована через интерфейс ICommand.
3. View – jsp+el+jstl
Страницы сделаны на jsp с jstl, также добавлены минималистичный css для удобства.
4. Валидация данных.
Вначале проверяется на самом сайте пустые ли поля.
В сервере есть класс Validator с методами и регулярными выражениями для проверки данных на валидность
На сервере проверяются следующие поля:
-
У департамента:
a. Номер телефона
-
У сотрудника:
a. Количество лет работы. Поле должно быть целым числом и быть меньше 100 лет
b. Почта
c. День рождения. Возраст сотрудника должен быть минимум 18 лет
На уровне БД имя у департамента и почта проверяется на уникальность(ключевое слово UNIQUE). Если сервер не сможет добавит данные в БД, отобразится список ошибкок на сайте
5. Уникальность имени у департамента и мыла у пользователя.
Данные поля уникальны, на уровне БД(ключевое слово UNIQUE), нет возможности добавить или изменить у имеющей сущности данные поля, при попытки добавить существующие имени/почты возникает предупреждение(ошибка) на страницы.
6. У сотрудника обязательно одно поле - числовое, одно — дата.
Числовое поле - сколько лет работает человек в департаменте, дата - день рождения.
7. Данные после валидации пропадать не должны, даже если они введены неправильно.
После проверки данных на валидность, если они не верны, на текущей странице появляются сообщения об ошибки и введенные пользователем данные. Если данные верны, они заносятся в БД и пользователь возвращается на страницу со списком.