Это мой pet-project на Java EE. Это веб-сайт для организации частных мероприятий. На сайте можно зарегистрироваться, поэтому каждый пользователь имеет свой профиль, который может редактировать. Некоторые пользователи наделены правами создавать мероприятия и управлять карточками других пользователей (привилегированные пользователи). Обычные пользователи могут искать мероприятия, просматривать их, регистрироваться для участия (или отказываться от участия). Информация о пользователях и мероприятиях хранится в базе данных. Имеется лаконичный пользовательский интерфейс.
- Веб Java EE: Servlets (JSP) + JSTL;
- БД: MySQL 8.0 + JDBC;
- Веб-сервер: Tomcat 9;
- CSS: Bootstrap 4;
- Тесты: JUnit 4.12;
- Сборка: Maven;
- VCS: Git.
- Форма регистрации пользователя;
- Хранение и актуализация данных о пользователях в БД MySQL;
- Аутентификация и авторизация пользователей;
- Функция "Запомнить меня" при авторизации;
- Верификация полей при регистрации / редактировании пользователей (проверка на уникальность, проверка надежности пароля, проверка имени пользователя на соответствие требованиям);
- Реализация модели полномочий в соответствии с ролевой моделью;
- Создание мероприятий (для привилегированных пользователей);
- Поиск мероприятий по ключевым параметрам (даты, описание, статусы);
- Просмотр карточки мероприятия и его параметров (что? где? когда?);
- Возможность работы в разных таймзонах;
- Регистрация в мероприятии для участия и отказ от участия;
- Формирование списков участников;
- Просмотр своих мероприятий (как участник и/или как организатор);
- Система статусов для мероприятий (Панируется, Запланировано, Отменено) и связанные ограничения на регистрацию в мероприятиях;
- Возможность открывать и закрывать регистрацию на мероприятие.
Роли "Менеджер" и "Пользователь", базовые привилегии (досутпны всем не заблокированным пользователям):
- смотреть общие страницы сайта;
- смотреть / редактировать данные о себе (кроме ключевых полей: username, tel, e-mail);
- изменять свой пароль;
- удалять своего пользователя;
- искать мероприятия (по датам, по автору, по статусу, по текстовым полям);
- регистрироваться для участия в мероприятии (или отказываться от участия);
- смотреть список мероприятий, в которых пользователь участвует;
- смотреть список других пользователей;
- смотреть персональные данные любого пользователя;
- редактировать не ключевые поля любого пользователя;
- менять права доступа другим пользователям в рамках ролей;
- создавать мероприятия;
- смотреть список других пользователей;
- смотреть / корректировать любые персональные данные любого пользователя (все поля);
- изменять / сбрасывать (на дефолтное значение) пароль любого пользователя;
- менять права доступа другим пользователям в рамках ролей;
- удалять любого пользователя;
- привилегий нет;
- не может входить в систему и пользоваться сайтом.
src/main/java
com.mycompany.makeanev2.User
класс для манипуляциями с пользователямиcom.mycompany.makeanev2.UserGroup
класс для манипуляциями с группами полномочийcom.mycompany.makeanev2.Event
класс для работы с мероприятиямиcom.mycompany.makeanev2.EventStatus
класс для работы со статусами мероприятия (Планируется, Запланировано, Отменено)com.mycompany.makeanev2.EventRegStatus
класс для работы со статусами регистрации (Открыта, Закрыта)com.mycompany.makeanev2.Participant
класс для манипуляции с участниками мероприятияcom.mycompany.makeanev2.ParticipantStatus
класс для работы со статусами участников (Основной, Запасной)com.mycompany.makeanev2.WeekOfMonth
вспомогательный класс для формирования календаря на месяц из объектов LocalDate (используется для календарня на главной странице)com.mycompany.makeanev2.Exceptions
пакет с классами для обработки собственных исключений приложения (UserException, EventException, ParticipantException, SearchException);com.mycompany.makeanev2.Filters.User
пакет с классами Servlet-фильтров, выполняющих необходимые проверки на наличие полномочий для доступа к отдельным веб-страницам, а также управляет выдачей веб-страниц в зависимости от полномочий пользователейcom.mycompany.makeanev2.Filters.Event
пакет с классами Servlet-фильтров, реализующих диспетчеризацию вызовов веб-страниц в зависимости от роли пользователяcom.mycompany.makeanev2.Servlets.User
классы сервлетов, формирующие данные о пользователях и передающие их на веб-страницы;com.mycompany.makeanev2.Servlets.Event
классы сервлетов, формирующие данные о мероприятиях и передающие их на веб-страницы;com.mycompany.makeanev2.MakeAnEv2ContextListener
класс с контекстом приложения (используется для определения таймзоны для приложения)com.mycompany.makeanev2.Utils
классы вспомогательных утилит для работы с базой данных (соединение + запросы к БД), классы для проверки полномочий на доступ (CheckPermission), для работы с http-сессиями и пользователями при реализации механизма авторизации (AuthUtil), для работы с внутренним календарем (CalendarUtils).
src/test/java
com.mycompany.makeanev2
тесты классов с бизнес-логикой (User, UserGroup, Event, EventRegStatus, EventStatus, Participant, ParticipantStatus, WeekOfMonth);com.mycompany.makeanev2.Exceptions
тесты для классов внутренних исключений приложения (UserException);com.mycompany.makeanev2.Utils
тесты механизма проверки полномочий и календаря (CheckPermission, CalendarUtils);
src/main/webapp/
(View)
WEB-INF
общие веб-страницы для всех пользователей (регистрация, редактирование пароля, страница результата действия, главная, подменю для поиска, модули подключения CSS и JS);WEB-INF/adminview
веб-страницы для АдминистратораWEB-INF/managerview
веб-страницы для МенеджераWEB-INF/ownerview
веб-страницы для СуперпользователяWEB-INF/userview
веб-страницы для Пользователя