Приложение писалось в качестве домашнего задания из курса "Сервис-ориентированные архитектуры" ПМИ ВШЭ.
Цель: на языке высокого уровня (Java, C#, Python и др. – на выбор обучающегося) реализовать REST веб-сервис и клиент для него, обеспечивающий сбор и предоставление клиентам возможностей работы с ресурсами игры «SOA-мафия».
Задача:
- Реализовать REST-сервис, который предоставляет возможность добавления, просмотра, редактирования и удаления следующей информации по профилю игрока: никнейм, аватар, пол, email. Должна быть обеспечена возможность получения профиля как отдельного игрока, так и перечня игроков.
- Реализовать сбор и представление посредством REST-сервиса статистики по игрокам и проведенным сессиям игр. Статистика по игроку должна генерироваться в виде PDF-документа, содержащего информацию: профиль игрока, количество сессий, количество побед, количество поражений, общее время в игре. Статистика по игроку должна генерироваться по асинхронному запросу, возвращающему URL, по которому в дальнейшем будет доступен PDF-документ со сгенерированной статистикой. Генерация статистики должна быть реализована на основе паттерна «Очередь заданий».
- Организовать регистрацию, авторизацию и разграничение прав пользователей к редактированию профиля игрока в REST-сервисе
- Организовать единый механизм регистрации и авторизации пользователей с использованием JWT как для основного приложения, так и для REST-сервиса
Необходимо наличие
docker-compose
docker-compose build
docker-compose up
# Получить информацию по пользователю с идентификатором c32240c6-4f4c-4100-a401-826f70faeb4a
http GET http://127.0.0.1:8080/players/c32240c6-4f4c-4100-a401-826f70faeb4a/stats
# Добавить пользователя username
http POST http://127.0.0.1:8080/players Username='username' Sex='male' Email='username@gmail.com' Avatar='https://i.imgur.com/n0XluaE.jpg'
# Получить файл user_stats.pdf со статистикой пользователя с идентификатором c32240c6-4f4c-4100-a401-826f70faeb4a
http --print=b GET http://127.0.0.1:8080/players/c32240c6-4f4c-4100-a401-826f70faeb4a/stats/466466649.pdf > user_stats.pdf
Добавить нового игрока
{
"Username": "username",
"Avatar": "https://i.imgur.com/n0XluaE.jpg",
"Sex": "male",
"Email": "username@gmail.com"
}
{
"Avatar": "https://i.imgur.com/07ddZW7.jpeg",
"Email": "username@gmail.com",
"ID": "a633a2c6-8734-4202-95ec-bdd12061611b",
"Sex": "male",
"Username": "username"
}
Получить информацию обо всех игроках в базе данных
[
{
"Avatar": "https://i.imgur.com/n0XluaE.jpg",
"Email": "ch4d@gmail.com",
"ID": "c32240c6-4f4c-4100-a401-826f70faeb4a",
"Sex": "male",
"Username": "gigachad"
},
{
"Avatar": "https://i.imgur.com/07ddZW7.jpeg",
"Email": "username@gmail.com",
"ID": "a633a2c6-8734-4202-95ec-bdd12061611b",
"Sex": "male",
"Username": "username"
}
]
Получить информацию об игроке с данным id
{
"Avatar": "https://i.imgur.com/n0XluaE.jpg",
"Email": "ch4d@gmail.com",
"ID": "c32240c6-4f4c-4100-a401-826f70faeb4a",
"Sex": "male",
"Username": "gigachad"
}
Обновить информацию об игроке с данным id
{
"Sex": "god"
}
{
"Avatar": "https://i.imgur.com/n0XluaE.jpg",
"Email": "ch4d@gmail.com",
"ID": "c32240c6-4f4c-4100-a401-826f70faeb4a",
"Sex": "god",
"Username": "gigachad"
}
Удалить игрока с данным id
Обработать информацию о прошедешей сессии у игрока с данным id и обновить его статистику
"IsWin": "true"
"Duration": "13"
Получить статистику игрока с данным id
127.0.0.1:8080/players/c32240c6-4f4c-4100-a401-826f70faeb4a/stats/995420084.pdf
Получить filename.pdf файл с отчетом по стастике игрока с данным id
Bianry data