Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/profatsky/foosball-tournament-backend
https://github.com/profatsky/foosball-tournament-backend
Last synced: 8 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/profatsky/foosball-tournament-backend
- Owner: profatsky
- Created: 2023-10-21T07:28:38.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-24T18:38:49.000Z (about 1 year ago)
- Last Synced: 2023-10-24T19:33:54.524Z (about 1 year ago)
- Language: Python
- Size: 96.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# foosball-tournament-backend
## Технологии
- Python
- FastAPI
- PostgreSQL[Репозиторий с фронтендом](https://github.com/alexander1934/foosball-tournament-frontend)
## Описание
Веб-приложение Foosball Tournament позволяет проводить и управлять турнирами по настольному футболу.### Регистрация и авторизация
Прежде чем создавать турнир или принимать участие в одном из имеющихся, пользователю необходимо пройти авторизацию. Неавторизованный пользователь может только просматривать список турниров, детальную информацию о них, просматривать профили пользователей и их команд.После авторизации пользователю открывается доступ к созданию команд, созданию турниров и участию в них. При регистрации пользователь указывает логин, пароль и свой никнейм в рамках площадки.
### Турниры
Авторизированный пользователь может создавать турниры.
При создании указывается:
- Название турнира
- Описание
- Дата начала
- Дата конца
- Система, по которой будут распределяться команды-участники (реализована только Олимпийская система)## Формирование сетки
Турнирная сетка строится по олимпийской системе (Single Elimination, Плей-офф), при которой участник выбывает из турнира после первого проигрыша. Такой подход обеспечивает выявление победителей за минимальное число туров.Учитывается количество команд, которые будут участвовать в турнире. Есть 2 сценария того, как строится турнирная сетка в зависимости от количества команд:
- Количество команд равно степени двойки. Это самый просто и логичный вариант
- Количество команд НЕ равно степени двойки. В таком случае турнирная сетка формируется так, чтобы ко второму туру осталось количество команд равное степени двойки. Таким образом, часть команд приступит к игре только во втором туре (раунде).## Инструкция по установке
Для проекта потребуется установить [Poetry](https://python-poetry.org/docs/) и
[docker](https://docs.docker.com/engine/install/) + [docker-compose](https://docs.docker.com/compose/install/linux/)### Подготовка к запуску
#### Инициализация базы данных для локальной разработки
```bash
docker compose up postgres -d
# wait for a bit
docker ps --format "{{.ID}}: {{.Names}}" | grep "foosball-tournament-backend-postgres" | cut -d: -f 1 | xargs -I {} docker exec {} bash -c "su - postgres -c \"createdb foosball\"" && echo database created
```#### Запуск установка зависимостей через Poetry. (Если есть проблемы, отредактируйте poetry.lock)
```bash
poetry install
```### Запуск проекта.
#### В докере
Обязательно нужно заполнить поле `authjwt_secret_key`. Сделать это можно двумя способами: напрямую в
docker-compose.yml указать переменную
```yaml
<...>
environment:
- DEBUG=True
- PYTHONPATH=/app
- POSTGRES_DSN=postgres://postgres:postgres@postgres/postgres
- authjwt_secret_key=myveryimportantsecret
ports:
- "8000:8000"
```Либо прописав такую команду: `export authjwt_secret_key=mysecretinanotherway`
и запустив docker-compose.#### Локально
```bash
export DEBUG=True
export authjwt_secret_key=myveryimportantsecret
export POSTGRES_DSN=postgres://postgres:postgres@localhost:5433/foosballdocker compose up -d postgres
python src/main.py
```## Требования для бэкенда
### Обязательные
| Требования | Выполнено или нет |
|--------------------------------------------------------------------------------------------------------|:-----------------:|
| 1. Использование база данных (любой), необходимо предоставить доступ, для оценки структуры базы данных | ✅ |
| 2. Корректная обработка ошибок и возврат соответствующих HTTP статусов и сообщений | ✅ |
| 3. Swagger документация API | ✅ |
| 4. Сервис должен работать стабильно, без неожиданных падений | ✅ |### Дополнительные (необязательные)
| Требования | Выполнено или нет |
|--------------------------------------------------------------------------|:-----------------:|
| 1. Высокая производительность | ✅ |
| 2. Разработка по чистой архитектуре | ❌ |
| 3. README с описанием проблем приложения и путей по решению этих проблем | ✅ |## Требования к продукту
### Функциональные требования к продукту (обязательные)
| Требования | Выполнено или нет |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------:|
| 1. Создание команды путем указания имени
(или ID, если реализована авторизация) | ✅ |
| 2. Возможность ввода счета сыгранного матча в турнирной сетке | ❌ |
| 3. Турнирная сетка должна генерироваться и корректно обрабатывать четное
и нечетное количество команд (логика генерации на ваше усмотрение, без ошибок) | ✅ |
| 4. В одной команде может находиться 2 человека | ✅ |
| 5. Возможность завершить турнир | ❌ |
| 6. Хранение истории сыгранных турниров | ✅ |
| 7. Возможность просмотра статусов всех турниров | ✅ |
| 8. Возможность обновить данные турнирной сетки (на крайний случай обновление
страницы должно обновить турнирную таблицу) | ✅ |
| 9. Хранение данных пользователей и матчей в БД | ✅ |
| 10. Сущности БД должны содержать более одного атрибута (сущности и связи на усмотрение разработчика) | ✅ |### Нефункциональные требования к продукту (дополнительные)
| Требования | Выполнено или нет |
|-----------------------------------------------------------------------------------------------------|:-----------------:|
| 1. Возможность регистрации, авторизации для доступа к турнирам | ✅ |
| 2. Разграничение прав доступа: турнир может начать только создатель турнира | ✅ |
| 3. Данные турнирной сетки должны обновлять автоматически | ✅ |
| 4. Турнир завершается автоматически, если все матчи сыграны, и победитель выявлен | ❌ |
| 5. Возможность просмотра статистики других пользователей (история участия в турнирах, побед и т.д.) | ✅ |