Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
838afa4
initial commit new brench
Jan 14, 2026
58a3d3f
Add StartServlet.java, start.jsp
Jan 14, 2026
c8fb0f3
Add QuestionServlet.java, question.jsp, Question.java
Jan 14, 2026
9a15b28
Add ResultServlet.java, result.jsp
Jan 15, 2026
eaeae4c
Add SessionKeys.java, SessionUtils.java, QuestionRepository.java. ref…
Jan 15, 2026
8b7de22
Add InterviewState.java
Jan 15, 2026
2efe1dd
Add FileQuestionSource.java, QuestionSource.java, QuestionValidator.j…
Jan 15, 2026
74886a9
A database of tests on various topics has been created. The names of …
Jan 16, 2026
f425ca8
Added TestSettingServlet.java with test setup mechanics, HomeServlet.…
Jan 18, 2026
1f421f1
Added registration and login, header.jspf, footer.jspf.
Jan 20, 2026
ac76da8
Added user profile and editing, selection of avatars
Jan 20, 2026
e26add7
Uploading your avatar
Jan 20, 2026
84f7419
Added separation of user roles admin and user
Jan 20, 2026
f2523e1
Added separation of user roles admin and user
Jan 20, 2026
e8f85e3
Add filters AuthFilter.java, AdminFilter.java
Jan 21, 2026
caa73a0
Fix ResultServlet.java, result.jsp, ProfileServlet.java, profile.jsp
Jan 21, 2026
f0f1eee
Added statistics on passing user tests, AdminStatisticsServlet.java, …
Jan 21, 2026
1ca07a3
Setting up Maven, added the first test InterviewStateTest.java
Jan 21, 2026
5d77f4e
Setting up Maven, added the first test InterviewStateTest.java
Jan 21, 2026
684c8cd
Executed the user statistics logic UserStatisticsServiceImpl.java
Jan 22, 2026
bb9d1af
Executed the user statistics logic UserStatisticsServiceImpl.java
Jan 22, 2026
c54d402
Add tests
Jan 22, 2026
4d2d7ce
Add tests
Jan 22, 2026
2e2738e
Add tests
Jan 23, 2026
085be3e
Add tests
Jan 23, 2026
0da1d24
Configured log4j2.xml, logging is specified packages controllers, fil…
Jan 24, 2026
67cd329
Configured log4j2.xml, logging is specified packages service, source,
Jan 25, 2026
fdea6ad
Configured log4j2.xml, logging is specified packages service, source,
Jan 25, 2026
95325ed
commit before creating the frontend
Jan 25, 2026
df10609
initial project design
Jan 25, 2026
aa5f136
fix format data and displayName
Jan 26, 2026
d95f3bd
Added working version of UI
Jan 26, 2026
a050544
Add default avatar
Jan 26, 2026
04956be
moved it to a separate password hashing PasswordUtil.java. Refactorin…
Jan 27, 2026
f9c656e
Refactoring UserServiceImpl.java
Jan 27, 2026
470b0d2
Added custom exceptions and validation
Jan 27, 2026
57c4809
Refactoring application initialization add ApplicationConfig.java, fi…
Jan 28, 2026
2a446d1
Add BaseServlet.java, refactoring classes
Jan 28, 2026
4fa865a
Add BaseServlet.java, refactoring classes
Jan 28, 2026
e1743fa
Add BaseStats, TopicUtils refactoring classes
Jan 28, 2026
d113b23
refactoring, add Readme
Jan 28, 2026
6652893
refactoring, add Readme
Jan 28, 2026
de08dbd
Add testing
Jan 28, 2026
9537ed9
Finish fix
Jan 29, 2026
4c23dbe
final edits main.css
Jan 29, 2026
2194e91
final edits
Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .fastRequest/config/fastRequestCurrentProjectEnvironment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"apifoxRelationMap":{},
"apifoxServerMap":{},
"environment":{},
"pmRelationMap":{}
}
178 changes: 178 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
# ProjectPantera - Java веб-приложение

## Обзор

ProjectPantera - это Java-веб-приложение для проведения технических собеседований и тестов, в основном ориентированное на темы программирования на Java. Приложение следует архитектурному паттерну MVC и использует технологический стек на основе сервлетов.

## Архитектура пакетов

### 📁 **Основные пакеты приложения**

#### **`com.javarush.zyibin.controllers`**
Компоненты веб-слоя, отвечающие за обработку HTTP-запросов и ответов.
- **Основные контроллеры**: `LoginServlet`, `ProfileServlet`, `QuestionServlet`, `ResultServlet` и т.д.
- **Подпакет admin**: `controllers.admin` - административная функциональность (`AdminStatisticsServlet`, `AdminUserServlet` и т.д.)

#### **`com.javarush.zyibin.service`**
Слой бизнес-логики, содержащий сервисы приложения.
- **Пользовательские сервисы**: `UserService`, `AuthenticationService`, `RegistrationService`
- **Сервисы статистики**: `UserStatisticsService`, `UserTestStatisticsService`
- **Другие сервисы**: `QuestionService`, `AvatarService`

#### **`com.javarush.zyibin.repository`**
Слой доступа к данным для операций персистентности.
- **Репозитории**: `UserRepository`, `TestResultRepository`, `QuestionRepository`
- **Реализации**: `InMemoryUserRepository`, `InMemoryTestResultRepository`

#### **`com.javarush.zyibin.model`**
Классы доменной модели, представляющие основные бизнес-сущности.
- **Сущности**: `User`, `TestResult`, `Question`, `Topic`, `Role`, `InterviewState`

### 📁 **Объекты передачи данных (DTO)**

#### **`com.javarush.zyibin.dto`**
Объекты передачи данных и value objects для представления данных.
- **DTO для статистики**: `UserStats`, `TopicStats`, `UserTestStats`, `UserTopicStats`
- **Базовые классы**: `BaseStats` - абстрактный базовый класс для статистики

### 📁 **Вспомогательные пакеты**

#### **`com.javarush.zyibin.util`**
Утилитные классы и вспомогательные функции.
- **Утилиты**: `PasswordUtil`, `TopicUtils`, `ValidationFactory`

#### **`com.javarush.zyibin.validation`**
Компоненты валидации входных данных.
- **Валидаторы**: `UserValidation`, `QuestionValidator`

#### **`com.javarush.zyibin.exception`**
Пользовательские классы исключений.
- **Исключения**: `AuthenticationException`, `ValidationException`

#### **`com.javarush.zyibin.filter`**
Сервлет-фильтры для обработки запросов.
- **Фильтры**: `AuthFilter`, `AdminFilter`

#### **`com.javarush.zyibin.session`**
Утилиты управления сессией.
- **Классы**: `SessionUtils`, `SessionKeys`

#### **`com.javarush.zyibin.source`**
Реализации источников данных.
- **Источники**: `QuestionSource`, `FileQuestionSource`

#### **`com.javarush.zyibin.handler`**
Компоненты обработки ошибок и запросов.
- **Обработчики**: `ErrorHandler`, `RequestHandler`

#### **`com.javarush.zyibin.config`**
Компоненты конфигурации и инициализации.
- **Конфигурация**: `ApplicationConfig`, `AppInitListener`

## Принципы архитектуры

### **Разделение ответственности**
- **Контроллеры**: Обрабатывают только HTTP-запросы/ответы
- **Сервисы**: Содержат бизнес-логику
- **Репозитории**: Управляют персистентностью данных
- **Модели**: Представляют доменные сущности
- **DTO**: Передают данные между слоями

### **Организация пакетов**
- **Функциональная группировка**: Связанные классы сгруппированы вместе
- **Разделение слоев**: Чёткое различие между представлением, бизнес-логикой и данными
- **Разделение утилит**: Вспомогательные классы в выделенных пакетах

### **Используемые паттерны проектирования**
- **MVC Pattern**: архитектура Model-View-Controller
- **Factory Pattern**: `ValidationFactory` для создания валидаторов
- **Repository Pattern**: абстракция доступа к данным
- **DTO Pattern**: объекты передачи данных для коммуникации между слоями

## Технологический стек

- **Java 17** - язык программирования
- **Servlet API** - веб-фреймворк
- **JSP** - технология представлений
- **Jackson** - обработка JSON
- **SLF4J** - фреймворк логирования
- **JUnit 5** - фреймворк тестирования
- **Mockito** - фреймворк мокирования
- **Maven** - инструмент сборки

## Ключевые возможности

1. **Управление пользователями**: регистрация, аутентификация, управление профилем
2. **Система тестов**: тематические технические тесты с вопросами
3. **Статистика**: комплексная статистика тестов и пользователей
4. **Административная панель**: административная функциональность для управления пользователями
5. **Управление сессией**: отслеживание состояния собеседования
6. **Валидация**: валидация входных данных для пользователей и вопросов

## Последние улучшения

### **Реструктуризация пакетов**
- ✅ Перемещены все классы статистики в пакет `dto`
- ✅ Консолидирован `ValidationFactory` в пакет `util`
- ✅ Перемещен `InterviewState` в пакет `model`
- ✅ Устранены избыточные небольшие пакеты
- ✅ Улучшена организация и консистентность пакетов

### **Качество кода**
- ✅ Устранено дублирование кода с помощью абстрактного класса `BaseStats`
- ✅ Централизована конверсия кодов тем в `TopicUtils`
- ✅ Улучшена организация импортов
- ✅ Повышена поддерживаемость

## Руководство по разработке

1. **Следуйте конвенциям пакетов**: размещайте классы в соответствующих пакетах в зависимости от функциональности
2. **Поддерживайте разделение**: не размещайте бизнес-логику в контроллерах
3. **Используйте DTO**: передавайте данные между слоями с помощью соответствующих DTO
4. **Реализуйте валидацию**: валидируйте входные данные на уровне сервисов
5. **Обрабатывайте исключения**: используйте пользовательские исключения для сценариев ошибок
6. **Пишите тесты**: поддерживайте покрытие тестами всех компонентов

## Сборка и запуск

```bash
# Скомпилировать проект
mvn compile

# Запустить тесты
mvn test

# Собрать WAR-файл
mvn package

# Запустить приложение (требуется сервлет-контейнер)
# Развернуть target/project-pantera-1.0-SNAPSHOT.war в Tomcat или аналогичный
```

## Структура проекта

```
src/
├── main/
│ ├── java/com/javarush/zyibin/
│ │ ├── controllers/ # Веб-слой
│ │ ├── service/ # Бизнес-логика
│ │ ├── repository/ # Доступ к данным
│ │ ├── model/ # Доменные сущности
│ │ ├── dto/ # Объекты передачи данных
│ │ ├── util/ # Утилиты
│ │ ├── validation/ # Валидация
│ │ ├── exception/ # Пользовательские исключения
│ │ ├── filter/ # Сервлет-фильтры
│ │ ├── session/ # Управление сессией
│ │ ├── source/ # Источники данных
│ │ ├── handler/ # Обработка ошибок
│ │ └── config/ # Конфигурация
│ └── resources/
│ └── questions/ # Данные тестовых вопросов
└── test/ # Тестовые классы
```

---

*Этот документ описывает текущее состояние архитектуры приложения ProjectPantera после последнего рефакторинга.*
65 changes: 64 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
Expand All @@ -64,6 +69,40 @@
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>

</dependencies>

<build>
Expand All @@ -86,6 +125,30 @@
<artifactId>maven-war-plugin</artifactId>
<version>3.4.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
37 changes: 0 additions & 37 deletions src/main/java/com/javarush/khmelov/app/cmd/Command.java

This file was deleted.

58 changes: 0 additions & 58 deletions src/main/java/com/javarush/khmelov/app/cmd/EditUser.java

This file was deleted.

23 changes: 0 additions & 23 deletions src/main/java/com/javarush/khmelov/app/cmd/ListUser.java

This file was deleted.

Loading