Проект - пример для использования при изучении Spring Framework. Представляет собой бэкенд сервис для регистрации и погашения билетов. В данном проекте использованы следующий технологический стэк:
- Java в качестве языка программирования;
- Spring Boot (контейнер сервлетов, реализация бизнес-логики);
- Java Persistence API - для реализации ORM взаимодействия с базой данных;
- Spring Security - авторизация и аутентификация пользователей, настройка безопасности для эндпоинтов;
- JWT - для использования в качестве сессии пользователя.
Основные настройки проекта находятся в файле application.properties:
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/tickets_db
spring.datasource.username=user
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=updateДля работы проекта требуется создать базу данных в СУБД PostgreSQL. Способы установки представленны в данном гайде.
Основные эндпоинты приложения:
Регистрация пользователя
[HTTP POST] /auth/registerПринимает JSON следующего формата:
{
"email":"string",
"password":"string"
}Возвращает JSON в формате:
{
"email": "string",
"uuid": "UUID",
"token": "string"
}Авторизация пользователя
[HTTP POST] /auth/loginПринимает JSON следующего формата:
{
"email":"string",
"password":"string"
}Возвращает JSON в формате:
{
"email": "string",
"token": "string"
}В обоих случаях, возвращаемый токен надо включать в заголовки запросов к эндпоинтам для регистрации или погашения билетов. При этом, для погашения билетов привилегии пользователя должны быть админские.
При запуске приложения в базу данных вносятся два тестовых пользователя с правами USER и ADMIN соответственно, так же для первого пользователя создаётся тестовый билет.
JSON тело с привилегиями USER:
{
"email":"greatoldfag@gmail.com",
"password":"password"
}JSON тело с привилегиями ADMIN:
{
"email":"admin@gmail.com",
"password":"password"
}Регистрация билета
[HTTP POST] /tickets/registerПринимает JSON в формате:
{
"eventName":"string",
"eventDate":"YYYY-MM-DD",
"ticketType":"string",
"emailOwner":"string"
}Возвращает JSON:
{
"eventName": "string",
"ticketId": "UUID",
"ownerEmail": "string",
"eventDate": "YYYY-MM-DD"
}Погашение билета (ADMIN only)
[HTTP POST] /tickets/redeemПринимает JSON в формате:
{
"ticketId":"UUID"
}Возвращает JSON:
{
"ticketId": "UUID",
"eventName": "string",
"eventDate": "YYYY-MM-DD",
"ticketType": "string",
"emailOwner": "string",
"redeemed": "boolean"
}Получить список всех зарегистрированных билетов (ADMIN only)
[HTTP GET] /tickets/Возвращает JSON:
{
"tickets": [
{
"ticketId": "string",
"eventName": "string",
"eventDate": "YYYY-MM-DD",
"ticketType": "string",
"emailOwner": "string",
"redeemed": "boolean"
}
]
}