Skip to content

Веб-приложение для поиска работы

DesBasito/Job-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JobSearch - Веб-приложение для поиска работы

Описание проекта

JobSearch — это полнофункциональное веб-приложение для поиска работы, созданное на основе Spring Boot. Проект реализует функционал, аналогичный HeadHunter, предоставляя платформу для взаимодействия соискателей и работодателей.

Основные возможности

🔐 Система аутентификации и авторизации

  • Двухролевая система: соискатели (employee) и работодатели (employer)
  • Безопасный вход: Spring Security с BCrypt шифрованием паролей
  • Remember Me функциональность: автоматическое запоминание пользователя с использованием JDBC Token Repository
  • Валидация данных: комплексная проверка входных данных
  • Многоязычность: поддержка русского и английского языков

👤 Личный кабинет соискателя

  • Управление личным профилем (редактирование данных, загрузка аватара)
  • Создание и управление резюме с модульной структурой:
    • Основная информация (название, зарплата)
    • Контактные данные (Telegram, email, телефон, LinkedIn, Facebook)
    • Опыт работы (должность, компания, обязанности, годы работы)
    • Образование (степень, учебное заведение, программа, даты)
  • Публикация/снятие с публикации резюме
  • Отклик на вакансии
  • Чат с работодателями

🏢 Личный кабинет работодателя

  • Управление профилем компании
  • Создание и управление вакансиями:
    • Основная информация (название, описание, зарплата)
    • Требуемый опыт работы
    • Категория вакансии
  • Просмотр откликов на вакансии
  • Публикация/снятие с публикации вакансий
  • Чат с соискателями

🔍 Функционал поиска и просмотра

  • Поиск вакансий с фильтрацией и сортировкой
  • Поиск резюме по категориям
  • Живой поиск (Live Search)
  • Пагинация результатов
  • Детальный просмотр вакансий и резюме

💬 Система мессенджера

  • Реальное время обмена сообщениями между соискателями и работодателями
  • История переписки
  • Уведомления о новых сообщениях

Технические особенности

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

Backend:

  • 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 токенами

Frontend:

  • Thymeleaf - серверный шаблонизатор (частично)
  • FreeMarker - основной шаблонизатор
  • Bootstrap 5 - CSS фреймворк
  • JavaScript - интерактивность
  • HTML5/CSS3 - разметка и стилизация

Документация API:

  • 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 эндпоинтов

🗄 База данных и JPA/Hibernate

Модель данных:

  • Пользователи (users) - основная информация о пользователях
  • Роли (authorities) - роли пользователей в системе
  • Вакансии (vacancies) - информация о вакансиях
  • Резюме (resumes) - информация о резюме
  • Категории (categories) - категории вакансий и резюме
  • Сообщения (messages) - система чата
  • Отклики (responded_applicants) - связь соискателей и вакансий
  • Токены Remember Me (persistent_logins) - для функции "Запомнить меня"

Особенности Hibernate настройки:

  • Валидация схемы: ddl-auto: validate
  • Lazy loading для оптимизации запросов
  • Правильные связи между сущностями (OneToMany, ManyToOne, ManyToMany)
  • Кастомные репозитории с производительными запросами

Liquibase миграции:

  • Структурированные миграции в db/changelog/
  • Инициализация тестовых данных
  • Версионирование изменений схемы базы данных
  • Автоматическое применение миграций при запуске

🐳 Docker поддержка

# Многоэтапная сборка
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"]

Особенности Docker конфигурации:

  • Многоэтапная сборка - оптимизация размера образа
  • Amazon Corretto 21 - надежная JVM
  • Автоматическая сборка с Maven
  • Порт 8089 для доступа к приложению

🌐 REST API

Полнофункциональные REST контроллеры:

  • /api/users/** - управление пользователями
  • /api/vacancies/** - работа с вакансиями
  • /api/resumes/** - работа с резюме
  • /api/responses/** - система откликов
  • /api/message/** - чат система

Особенности API:

  • Pagination для больших списков данных
  • Filtering и Sorting возможности
  • Валидация всех входящих данных
  • RESTful дизайн с правильными HTTP кодами
  • JSON формат данных

🎨 Интернационализация (i18n)

Поддержка языков:

  • Русский (по умолчанию) - messages_ru.properties
  • Английский - messages_en.properties
  • Переключение языков через параметр ?lang=en/ru

Локализованные элементы:

  • Все пользовательские сообщения
  • Формы валидации
  • Навигация и интерфейс
  • Динамическое переключение без перезагрузки сессии

📊 Логирование и мониторинг

Настройки логирования:

  • Spring Security DEBUG режим для разработки
  • Файловое логирование в logs/spring.log
  • Конфигурируемые уровни логирования
  • Глобальная обработка исключений с логированием

Запуск проекта

Локальный запуск

  1. Требования:

    • Java 21+
    • Maven 3.6+
  2. Клонирование и запуск:

git clone [repository-url]
cd HT-49
mvn spring-boot:run
  1. Доступ к приложению:
    • Веб-интерфейс: http://localhost:8080
    • H2 Console: http://localhost:8080/h2-console
    • Swagger UI: http://localhost:8080/swagger-ui.html

Docker запуск

# Сборка образа
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):

Соискатели:

Работодатели:

Уникальные особенности проекта

1. Продвинутая система Remember Me

  • Использование JDBC Token Repository для безопасного хранения токенов
  • Настраиваемое время жизни токенов (2 дня)
  • Автоматическая очистка истекших токенов

2. Модульная архитектура резюме

  • Динамическое добавление секций опыта работы и образования
  • Гибкая система контактов с различными типами
  • Валидация взаимосвязанных полей

3. Многоязычность с динамическим переключением

  • Полная локализация интерфейса
  • Сохранение выбранного языка в сессии
  • Unicode поддержка для корректного отображения

4. Система real-time чата

  • Мгновенный обмен сообщениями
  • Связывание чатов с откликами на вакансии
  • История переписки с временными метками

5. Комплексная система безопасности

  • Многоуровневая защита с ролевой моделью
  • CSRF защита для всех форм
  • Кастомные фильтры безопасности

6. Оптимизированная работа с базой данных

  • Lazy loading для производительности
  • Эффективные запросы с пагинацией
  • Proper entity relationships

7. Production-ready Docker конфигурация

  • Многоэтапная сборка для оптимизации
  • Безопасные базовые образы
  • Конфигурация для масштабирования

Техническое задание

Полное техническое задание доступно по ссылке: Техническое задание

Дополнительная документация

  • API документация: доступна в Swagger UI после запуска приложения
  • Схема базы данных: описана в Liquibase миграциях
  • Конфигурация: детально прописана в application.yaml

Этот проект демонстрирует современные подходы к разработке веб-приложений с использованием Spring Boot экосистемы, включая безопасность, базы данных, контейнеризацию и лучшие практики разработки.