Вебсервіс у вигляді REST API, призначений для перетворення довгих URL-адрес на короткі, з можливістю відстеження статистики переходів та керування посиланнями для зареєстрованих користувачів.
Цей проєкт реалізує REST API для сервісу скорочення URL. Основні можливості включають:
- Реєстрація та Автентифікація: Користувачі можуть реєструватися та входити в систему. Автентифікація реалізована за допомогою JWT (JSON Web Tokens). Паролі зберігаються у хешованому вигляді (BCrypt).
- Створення Коротких Посилань: Автентифіковані користувачі можуть створювати короткі посилання для будь-яких валідних URL-адрес. Можна вказати термін дії посилання. Система генерує унікальний короткий ідентифікатор (6-8 символів).
- Перехід за Посиланням: Будь-який користувач (навіть неавтентифікований) може перейти за коротким посиланням. Система перенаправить його на оригінальний URL та оновить лічильник переходів.
- Статистика: Можна переглядати статистику переходів для будь-якого посилання через окремий ендпоїнт. Автентифіковані користувачі також мають доступ до списку своїх посилань .
- Керування Посиланнями: Автентифіковані користувачі можуть переглядати та (передбачається ТЗ, але не показано в контролерах) видаляти свої посилання.
- API Документація: Проєкт надає документацію API у форматі OpenAPI 3.0 (Swagger).
- Версійність API: Передбачено версійність API.
- Мова: Java 17+
- Фреймворк: Spring Boot 3.2
- Доступ до даних: Spring Data JPA
- База даних: PostgreSQL
- Міграції БД: Flyway
- Автентифікація: Spring Security, JWT (бібліотека
com.auth0:java-jwt) - API Документація: OpenAPI 3.0 (Springdoc)
- Тестування: JUnit 5, Mockito, Testcontainers (для інтеграційних тестів з БД)
- Збірка: Gradle
- Контейнеризація: Docker, Docker Compose
- CI/CD: GitHub Actions
- Інше: Lombok
Перед початком роботи переконайтеся, що у вас встановлено:
- Java Development Kit (JDK) версії 17 або вище.
- Docker та Docker Compose.
- Git (для клонування репозиторію).
- (Опціонально) Встановлений клієнт PostgreSQL для прямого доступу до БД.
-
Клонуйте репозиторій:
git clone <URL_вашого_репозиторію> cd <назва_директорії_проєкту>
-
Налаштування змінних середовища:
POSTGRES_DB=url_shortener_db POSTGRES_USER=your_db_user POSTGRES_PASSWORD=your_db_password DB_HOST=db DB_PORT=5432 DB_USERNAME=${POSTGRES_USER} DB_PASSWORD=${POSTGRES_PASSWORD} JWT_SECRET=ваш_дуже_секретний_ключ_для_jwt_мінімум_256_біт
-
application.properties:
spring.datasource.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${POSTGRES_DB} spring.datasource.username=${DB_USERNAME} spring.datasource.password=${DB_PASSWORD} jwt.secret=${JWT_SECRET}
-
Збірка (опціонально):
./gradlew build
docker-compose up --build -d
docker-compose logs -f
docker-compose down./gradlew bootRun -Dspring.profiles.active=devhttp://localhost:8080/swagger-ui.html
./gradlew testЗвіти: build/reports/tests/index.html
export SPRING_PROFILES_ACTIVE=prod
# або
-Dspring.profiles.active=prod