Spring Medicines – пет проект на Spring Boot для управления списком лекарственных препаратов с поддержкой аутентификации/авторизации (через локальный логин/пароль и OAuth2 Яндекс), а также с отправкой email-уведомлений об истечении срока годности.
- Язык: Java 21+
- Фреймворк: Spring Boot 3.4.0 (Security, Data JPA, Mail)
- База данных: PostgreSQL
- Миграции: Liquibase
- Аутентификация:
- Локальная (логин/пароль,
BCryptPasswordEncoder) - OAuth2 (через Яндекс) с выдачей собственного JWT
- Локальная (логин/пароль,
- Авторизация: ролевой доступ (USER, ADMIN)
- Токены: JWT
- Отправка email:
JavaMailSender + RabbitMQ+ SMTP - Сборка: Gradle
- Тестирование: JUnit, Testcontainers
- Документация API: Springdoc OpenAPI
- Просмотр препаратов без авторизации
GET /api/medicines(список)GET /api/medicines/{id}(детали)
- Аутентификация
- Локальная:
POST /api/auth/login(выдаёт JWT) - OAuth2 через Яндекс: при успехе выдает локальный JWT
- Авторизация (роли)
- USER — может смотреть список и детали
- ADMIN — может добавлять (
POST), обновлять (PUT), удалять (DELETE) препараты, а также управлять пользователями.
- Email-уведомления
- При приближении даты истечения срока годности отправляется письмо на email.
- SMTP-настройки (логин, пароль, хост, порт) задаются в
application.yamlили через.env. - Используется
JavaMailSender -> RabbitMQ -> Mail.
- Liquibase
- Для миграций БД: автоматически создаёт таблицы и вставляет тестовые данные.
- Документация API
- Доступна по адресу:
http://localhost:8080/swagger-ui/index.html(Springdoc OpenAPI).
- JWT: При входе (логин/пароль или OAuth2 Яндекс) приложение генерирует JWT, который клиент далее передаёт в заголовке
Authorization: Bearer .... - Яндекс OAuth2: При успешном входе через Яндекс пользователь тоже получает JWT, что делает приложение stateless.
- Roles:
hasRole('ADMIN')для создания/обновления/удаления,permitAll()для просмотра.
- Склонировать репозиторий.
- Скопировать
.env.templateв.env, заполнить переменные окружения (SMTP, JWT секрет и т.д.). - Запустить
./gradlew bootRunили собрать./gradlew buildи запускjava -jar build/libs/spring-medicines-<version>.jar. - Swagger:
GET http://localhost:8080/swagger-ui/index.html.
- Интеграционные тесты: Spring Boot Test + Testcontainers (поднимают PostgreSQL контейнер)
- Запуск:
./gradlew test