JobSearch — это полнофункциональное веб-приложение для поиска работы, созданное на основе Spring Boot. Проект реализует функционал, аналогичный HeadHunter, предоставляя платформу для взаимодействия соискателей и работодателей.
- Двухролевая система: соискатели (employee) и работодатели (employer)
 - Безопасный вход: Spring Security с BCrypt шифрованием паролей
 - Remember Me функциональность: автоматическое запоминание пользователя с использованием JDBC Token Repository
 - Валидация данных: комплексная проверка входных данных
 - Многоязычность: поддержка русского и английского языков
 
- Управление личным профилем (редактирование данных, загрузка аватара)
 - Создание и управление резюме с модульной структурой:
- Основная информация (название, зарплата)
 - Контактные данные (Telegram, email, телефон, LinkedIn, Facebook)
 - Опыт работы (должность, компания, обязанности, годы работы)
 - Образование (степень, учебное заведение, программа, даты)
 
 - Публикация/снятие с публикации резюме
 - Отклик на вакансии
 - Чат с работодателями
 
- Управление профилем компании
 - Создание и управление вакансиями:
- Основная информация (название, описание, зарплата)
 - Требуемый опыт работы
 - Категория вакансии
 
 - Просмотр откликов на вакансии
 - Публикация/снятие с публикации вакансий
 - Чат с соискателями
 
- Поиск вакансий с фильтрацией и сортировкой
 - Поиск резюме по категориям
 - Живой поиск (Live Search)
 - Пагинация результатов
 - Детальный просмотр вакансий и резюме
 
- Реальное время обмена сообщениями между соискателями и работодателями
 - История переписки
 - Уведомления о новых сообщениях
 
- Java 21 - современная версия Java
 - Spring Boot 3.2.3 - основной фреймворк
 - Spring Security - безопасность приложения
 - Spring Data JPA - работа с базой данных
 - Hibernate 6.5.0 - ORM фреймворк
 - Spring Validation - валидация данных
 - Spring Boot Mail - отправка email уведомлений
 
- H2 Database - встраиваемая база данных для разработки и тестирования
 - Liquibase 4.26.0 - миграции базы данных
 - JDBC для работы с Remember Me токенами
 
- Thymeleaf - серверный шаблонизатор (частично)
 - FreeMarker - основной шаблонизатор
 - Bootstrap 5 - CSS фреймворк
 - JavaScript - интерактивность
 - HTML5/CSS3 - разметка и стилизация
 
- SpringDoc OpenAPI 2.4.0 - автогенерация Swagger документации
 - Swagger UI - интерфейс для тестирования API
 
- Lombok - уменьшение boilerplate кода
 - Jakarta Validation - валидация данных
 
- BCrypt шифрование паролей
 - Remember Me функциональность с использованием JDBC Token Repository
 - CSRF защита для всех форм
 - Роль-основанный доступ (Role-based access control)
 - Session управление с настраиваемым временем жизни
 
RedirectIfAuthenticatedFilter- перенаправление аутентифицированных пользователей- Настройка доступа к эндпоинтам по ролям
 - Защита API эндпоинтов
 
- Пользователи (
users) - основная информация о пользователях - Роли (
authorities) - роли пользователей в системе - Вакансии (
vacancies) - информация о вакансиях - Резюме (
resumes) - информация о резюме - Категории (
categories) - категории вакансий и резюме - Сообщения (
messages) - система чата - Отклики (
responded_applicants) - связь соискателей и вакансий - Токены Remember Me (
persistent_logins) - для функции "Запомнить меня" 
- Валидация схемы: 
ddl-auto: validate - Lazy loading для оптимизации запросов
 - Правильные связи между сущностями (OneToMany, ManyToOne, ManyToMany)
 - Кастомные репозитории с производительными запросами
 
- Структурированные миграции в 
db/changelog/ - Инициализация тестовых данных
 - Версионирование изменений схемы базы данных
 - Автоматическое применение миграций при запуске
 
# Многоэтапная сборка
FROM maven:3.9.8-amazoncorretto-21 AS build
WORKDIR /build
COPY src ./src
COPY pom.xml ./
RUN mvn clean package -e -DskipTests
FROM amazoncorretto:21
WORKDIR /app
COPY --from=build /build/target/HT-49*jar ./ht-49.jar
EXPOSE 8089
CMD ["java","-jar","ht-49.jar"]- Многоэтапная сборка - оптимизация размера образа
 - Amazon Corretto 21 - надежная JVM
 - Автоматическая сборка с Maven
 - Порт 8089 для доступа к приложению
 
/api/users/**- управление пользователями/api/vacancies/**- работа с вакансиями/api/resumes/**- работа с резюме/api/responses/**- система откликов/api/message/**- чат система
- Pagination для больших списков данных
 - Filtering и Sorting возможности
 - Валидация всех входящих данных
 - RESTful дизайн с правильными HTTP кодами
 - JSON формат данных
 
- Русский (по умолчанию) - 
messages_ru.properties - Английский - 
messages_en.properties - Переключение языков через параметр 
?lang=en/ru 
- Все пользовательские сообщения
 - Формы валидации
 - Навигация и интерфейс
 - Динамическое переключение без перезагрузки сессии
 
- Spring Security DEBUG режим для разработки
 - Файловое логирование в 
logs/spring.log - Конфигурируемые уровни логирования
 - Глобальная обработка исключений с логированием
 
- 
Требования:
- Java 21+
 - Maven 3.6+
 
 - 
Клонирование и запуск:
 
git clone [repository-url]
cd HT-49
mvn spring-boot:run- Доступ к приложению:
- Веб-интерфейс: 
http://localhost:8080 - H2 Console: 
http://localhost:8080/h2-console - Swagger UI: 
http://localhost:8080/swagger-ui.html 
 - Веб-интерфейс: 
 
# Сборка образа
docker build -t jobsearch-app .
# Запуск контейнера
docker run -p 8089:8089 jobsearch-appПо умолчанию используется H2 Database с настройками:
- URL: 
jdbc:h2:./db/Job_Search;AUTO_SERVER=true - Username: 
root - Password: 
troot2191020 - Console доступ: отключен в production
 
src/main/java/kg/attractor/ht49/
├── config/                 # Конфигурационные классы
│   ├── SecurityConfig.java    # Настройки безопасности
│   ├── AppConfig.java         # Общие настройки приложения
│   ├── LocalConfig.java       # Интернационализация
│   └── SwaggerConfig.java     # Настройка Swagger
├── controllers/            # REST и MVC контроллеры
│   ├── mvc/                  # Thymeleaf/FreeMarker контроллеры
│   └── rest/                 # REST API контроллеры
├── dto/                    # Data Transfer Objects
├── models/                 # JPA сущности
├── services/               # Бизнес-логика
├── repositories/           # Репозитории данных
└── exceptions/             # Обработка исключений
src/main/resources/
├── db/changelog/           # Liquibase миграции
├── templates/              # FreeMarker шаблоны
├── static/                 # CSS, JS, изображения
├── messages*.properties    # Файлы локализации
└── application.yaml        # Конфигурация приложения
В системе предустановлены тестовые пользователи (пароли в миграции 008_add_data.sql):
- john.doe@example.com / пароль: 
qwe - johny@example.com / пароль: 
qwerty - sina@example.com / пароль: 
qwerty 
- michael.johnson@example.com / пароль: 
password123 - jane.smith@example.com / пароль: 
password456 - peter.wilson@example.com / пароль: 
qwe 
- Использование JDBC Token Repository для безопасного хранения токенов
 - Настраиваемое время жизни токенов (2 дня)
 - Автоматическая очистка истекших токенов
 
- Динамическое добавление секций опыта работы и образования
 - Гибкая система контактов с различными типами
 - Валидация взаимосвязанных полей
 
- Полная локализация интерфейса
 - Сохранение выбранного языка в сессии
 - Unicode поддержка для корректного отображения
 
- Мгновенный обмен сообщениями
 - Связывание чатов с откликами на вакансии
 - История переписки с временными метками
 
- Многоуровневая защита с ролевой моделью
 - CSRF защита для всех форм
 - Кастомные фильтры безопасности
 
- Lazy loading для производительности
 - Эффективные запросы с пагинацией
 - Proper entity relationships
 
- Многоэтапная сборка для оптимизации
 - Безопасные базовые образы
 - Конфигурация для масштабирования
 
Полное техническое задание доступно по ссылке: Техническое задание
- API документация: доступна в Swagger UI после запуска приложения
 - Схема базы данных: описана в Liquibase миграциях
 - Конфигурация: детально прописана в 
application.yaml 
Этот проект демонстрирует современные подходы к разработке веб-приложений с использованием Spring Boot экосистемы, включая безопасность, базы данных, контейнеризацию и лучшие практики разработки.