Add readme, screenshots and small fixes

This commit is contained in:
2024-06-22 14:36:54 +04:00
parent c516ba920c
commit 7b2f270913
7 changed files with 45 additions and 3 deletions

42
README.md Normal file
View File

@@ -0,0 +1,42 @@
# .Torrent backend
> .Torrent - сервис обмена .torrent файлами видеоигр, фильмов и аудиокниг
## Стек
- Python 3.12
- FastAPI (REST API)
- Pydantic
- SQLAlchemy (ORM, async)
- и другие
- Typer
- dotenv
- asyncio и aiofiles
- Pillow
- hashlib
## Возможности
- Получение, добавление, изменение и удаление трёх типов сущностей (видеоигр, фильмов и аудиокниг)
- Загрузка файлов (.torrent файлы, обложки, аудиофрагменты)
- Авторизация через JWT токен
- Вся конфигурация через файл .env (или переменные среды), для удобного запуска в Docker контейнере
- Лёгкое переключение между разными БД (в тестовом окружении используется SQLite, в контейнере PostgreSQL)
- Автодокументация с помощью Swagger
## Скриншоты
|![](./screenshots/swagger.png) Пример автодокументации (Swagger)|
|-|
|![](./screenshots/main.png) Пример главной страницы приложения (Frontend)|
|![](./screenshots/movie.png) Пример страницы с информацией о фильме (Frontend)|
## Запуск
### Локально
pip install -r ./requirements.txt
./main database create
fastapi dev ./main.py
## ToDo
- [ ] Dockerfile
- [ ] Добавить ссылку на общий репозиторий
- [ ] Обновить requirements.txt
- [ ] Теги жанров для сущностей
- [ ] Поиск

View File

@@ -30,7 +30,7 @@ async def edit_audiobook(db: AsyncSession,
audiobook_info: sch.AudiobookCreate): audiobook_info: sch.AudiobookCreate):
audiobook = await db.get(mdl.Audiobook, audiobook_id) audiobook = await db.get(mdl.Audiobook, audiobook_id)
for key, value in vars(audiobook_info).items(): for key, value in vars(audiobook_info).items():
if (value and value is not None and getattr(audiobook, key) != value): if (getattr(audiobook, key) != value):
setattr(audiobook, key, value) setattr(audiobook, key, value)
setattr(audiobook, "update_date", strftime("%Y-%m-%d %H:%M:%S")) setattr(audiobook, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
await db.commit() await db.commit()

View File

@@ -30,7 +30,7 @@ async def edit_game(db: AsyncSession,
game_info: sch.GameCreate): game_info: sch.GameCreate):
game = await db.get(mdl.Game, game_id) game = await db.get(mdl.Game, game_id)
for key, value in vars(game_info).items(): for key, value in vars(game_info).items():
if (value and value is not None and getattr(game, key) != value): if (getattr(game, key) != value):
setattr(game, key, value) setattr(game, key, value)
setattr(game, "update_date", strftime("%Y-%m-%d %H:%M:%S")) setattr(game, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
await db.commit() await db.commit()

View File

@@ -30,7 +30,7 @@ async def edit_movie(db: AsyncSession,
movie_info: sch.MovieCreate): movie_info: sch.MovieCreate):
movie = await db.get(mdl.Movie, movie_id) movie = await db.get(mdl.Movie, movie_id)
for key, value in vars(movie_info).items(): for key, value in vars(movie_info).items():
if (value and value is not None and getattr(movie, key) != value): if (getattr(movie, key) != value):
setattr(movie, key, value) setattr(movie, key, value)
setattr(movie, "update_date", strftime("%Y-%m-%d %H:%M:%S")) setattr(movie, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
await db.commit() await db.commit()

BIN
screenshots/main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

BIN
screenshots/movie.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 KiB

BIN
screenshots/swagger.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB