mirror of
https://github.com/StepanovPlaton/torrent_backend.git
synced 2026-04-03 12:20:38 +04:00
Add readme, screenshots and small fixes
This commit is contained in:
42
README.md
Normal file
42
README.md
Normal 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
|
||||
|
||||
## Скриншоты
|
||||
|
||||
| Пример автодокументации (Swagger)|
|
||||
|-|
|
||||
| Пример главной страницы приложения (Frontend)|
|
||||
| Пример страницы с информацией о фильме (Frontend)|
|
||||
|
||||
## Запуск
|
||||
### Локально
|
||||
pip install -r ./requirements.txt
|
||||
./main database create
|
||||
fastapi dev ./main.py
|
||||
|
||||
## ToDo
|
||||
- [ ] Dockerfile
|
||||
- [ ] Добавить ссылку на общий репозиторий
|
||||
- [ ] Обновить requirements.txt
|
||||
- [ ] Теги жанров для сущностей
|
||||
- [ ] Поиск
|
||||
@@ -30,7 +30,7 @@ async def edit_audiobook(db: AsyncSession,
|
||||
audiobook_info: sch.AudiobookCreate):
|
||||
audiobook = await db.get(mdl.Audiobook, audiobook_id)
|
||||
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, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
|
||||
await db.commit()
|
||||
|
||||
@@ -30,7 +30,7 @@ async def edit_game(db: AsyncSession,
|
||||
game_info: sch.GameCreate):
|
||||
game = await db.get(mdl.Game, game_id)
|
||||
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, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
|
||||
await db.commit()
|
||||
|
||||
@@ -30,7 +30,7 @@ async def edit_movie(db: AsyncSession,
|
||||
movie_info: sch.MovieCreate):
|
||||
movie = await db.get(mdl.Movie, movie_id)
|
||||
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, "update_date", strftime("%Y-%m-%d %H:%M:%S"))
|
||||
await db.commit()
|
||||
|
||||
BIN
screenshots/main.png
Normal file
BIN
screenshots/main.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 613 KiB |
BIN
screenshots/movie.png
Normal file
BIN
screenshots/movie.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 716 KiB |
BIN
screenshots/swagger.png
Normal file
BIN
screenshots/swagger.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
Reference in New Issue
Block a user