diff --git a/README.md b/README.md new file mode 100644 index 0000000..faff483 --- /dev/null +++ b/README.md @@ -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 +- [ ] Теги жанров для сущностей +- [ ] Поиск \ No newline at end of file diff --git a/database/crud/audiobooks.py b/database/crud/audiobooks.py index 0185f16..8f9aa63 100644 --- a/database/crud/audiobooks.py +++ b/database/crud/audiobooks.py @@ -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() diff --git a/database/crud/games.py b/database/crud/games.py index f209a03..a64f8d2 100644 --- a/database/crud/games.py +++ b/database/crud/games.py @@ -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() diff --git a/database/crud/movies.py b/database/crud/movies.py index 6008d23..0f4c9c6 100644 --- a/database/crud/movies.py +++ b/database/crud/movies.py @@ -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() diff --git a/screenshots/main.png b/screenshots/main.png new file mode 100644 index 0000000..7d7d192 Binary files /dev/null and b/screenshots/main.png differ diff --git a/screenshots/movie.png b/screenshots/movie.png new file mode 100644 index 0000000..41f43ba Binary files /dev/null and b/screenshots/movie.png differ diff --git a/screenshots/swagger.png b/screenshots/swagger.png new file mode 100644 index 0000000..b0eba14 Binary files /dev/null and b/screenshots/swagger.png differ