Сервис для сокращения URL с аутентификацией через Keycloak.
- Создание коротких ссылок
- Просмотр всех своих ссылок со статистикой
- Детальная статистика по каждой ссылке
- Удаление своих ссылок
- Отслеживание последнего доступа к ссылке
- Аутентификация через Keycloak JWT
- Swagger UI с авторизацией
- Миграции базы данных через Liquibase
- DTO и мапперы для чистой архитектуры
- Рандомные коды ссылок (4-8 символов)
- URL:
http://localhost:8080/swagger-ui.html - Авторизация: Bearer Token (JWT из Keycloak)
POST /api/shorten- Создать короткую ссылкуGET /api/my-links- Получить все мои ссылки со статистикойGET /api/stats/{code}- Детальная статистика ссылки (только для владельца)DELETE /api/links/{code}- Удалить ссылку (только для владельца)GET /{code}- Переход по короткой ссылке
export DB_URL=jdbc:postgresql://localhost:5432/shortener
export DB_USERNAME=postgres
export DB_PASSWORD=postgresLiquibase автоматически создаст и обновит схему базы данных при запуске.
./mvnw spring-boot:run- Получите JWT токен из Keycloak
- В Swagger UI нажмите кнопку "Authorize"
- Введите токен в формате:
Bearer YOUR_JWT_TOKEN - Нажмите "Authorize"
id(UUID) - ID пользователя из Keycloakusername(VARCHAR) - Имя пользователяemail(VARCHAR) - Emailgiven_name(VARCHAR) - Имяfamily_name(VARCHAR) - Фамилияmiddle_name(VARCHAR) - Отчествоfull_name(VARCHAR) - Полное имяphone_number(VARCHAR) - Телефонphone_number_verified(BOOLEAN) - Подтвержден ли телефонemail_verified(BOOLEAN) - Подтвержден ли emailgender(VARCHAR) - Пол
id(BIGSERIAL) - ID ссылкиoriginal_url(VARCHAR) - Оригинальный URLcreated_at(TIMESTAMP) - Дата созданияclick_count(BIGINT) - Количество переходовlast_accessed(TIMESTAMP) - Последний доступ к ссылкеuser_id(UUID) - ID пользователя (FK)
ShortLinkDto- основная информация о ссылкеShortLinkStatsDto- детальная статистика ссылкиUserAccountDto- информация о пользователеCreateShortLinkRequest- запрос на создание ссылкиCreateShortLinkResponse- ответ при создании ссылкиDeleteLinkResponse- ответ при удалении ссылки
ShortLinkMapper- преобразование междуShortLinkentity и DTOUserAccountMapper- преобразование междуUserAccountentity и DTO
RandomCodeGenerator- генерация рандомных кодов для ссылок- Коды состоят из 4-8 символов (буквы и цифры)
- Первый символ всегда буква для лучшей читаемости
- Гарантированная уникальность кодов
{
"url": "https://example.com"
}Ответ:
{
"shortUrl": "/Kx9m",
"originalUrl": "https://example.com"
}Ответ:
[
{
"id": 1,
"code": "Kx9m",
"shortUrl": "/Kx9m",
"originalUrl": "https://example.com",
"createdAt": "2025-10-29T18:00:00",
"clickCount": 42,
"lastAccessed": "2025-10-29T20:30:00",
"userId": "123e4567-e89b-12d3-a456-426614174000",
"username": "user123"
}
]Ответ:
{
"code": "Kx9m",
"shortUrl": "/Kx9m",
"originalUrl": "https://example.com",
"clickCount": 42,
"createdAt": "2025-10-29T18:00:00",
"lastAccessed": "2025-10-29T20:30:00",
"ownerId": "123e4567-e89b-12d3-a456-426614174000",
"ownerUsername": "user123"
}Ответ:
{
"message": "Ссылка успешно удалена",
"code": "Kx9m"
}