From 6ea6abad41f64f9d6d4d9e2ba958cc9407992ff7 Mon Sep 17 00:00:00 2001 From: StepanovPlaton Date: Sat, 11 May 2024 11:00:51 +0400 Subject: [PATCH] Add game card --- .gitignore | 1 + database/crud/games.py | 5 +++- database/schemas/__init__.py | 1 + database/{schemas.py => schemas/games.py} | 29 ++++++++--------------- file_handler.py | 16 +++++++++---- routes/games.py | 8 +++++++ 6 files changed, 35 insertions(+), 25 deletions(-) create mode 100644 database/schemas/__init__.py rename database/{schemas.py => schemas/games.py} (71%) diff --git a/.gitignore b/.gitignore index 78f4009..b426b75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ content dev_database.db +run.bat # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/database/crud/games.py b/database/crud/games.py index 1feeeb5..0d920cb 100644 --- a/database/crud/games.py +++ b/database/crud/games.py @@ -1,3 +1,4 @@ +from time import strftime from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select @@ -9,7 +10,9 @@ from ..database import add_transaction async def add_game(db: AsyncSession, game_info: sch.GameCreate, user_id: int): - game = mdl.Game(**game_info.model_dump(), owner_id=user_id) + game = mdl.Game(**game_info.model_dump(), + upload_date=strftime("%Y-%m-%d %H:%M:%S"), + owner_id=user_id) return await add_transaction(db, game) diff --git a/database/schemas/__init__.py b/database/schemas/__init__.py new file mode 100644 index 0000000..f1d38aa --- /dev/null +++ b/database/schemas/__init__.py @@ -0,0 +1 @@ +from .games import * diff --git a/database/schemas.py b/database/schemas/games.py similarity index 71% rename from database/schemas.py rename to database/schemas/games.py index ac0b0c6..a1f2287 100644 --- a/database/schemas.py +++ b/database/schemas/games.py @@ -1,15 +1,22 @@ from pydantic import BaseModel -class GameBase(BaseModel): +class GameCardBase(BaseModel): title: str cover: str | None = None description: str | None = None + + +class GameCard(GameCardBase): + id: int + upload_date: str | None = None + + +class GameBase(GameCardBase): torrent_file: str language: str | None = None version: str | None = None download_size: str | None = None - upload_date: str | None = None system: str | None = None processor: str | None = None @@ -24,24 +31,8 @@ class GameCreate(GameBase): class Game(GameBase): id: int + upload_date: str | None owner_id: int class Config: from_attributes = True - - -class UserBase(BaseModel): - email: str - name: str - - -class UserCreate(UserBase): - password: str - - -class User(UserBase): - id: int - games: list[Game] = [] - - class Config: - from_attributes = True diff --git a/file_handler.py b/file_handler.py index 0fd2efb..e2aaea2 100644 --- a/file_handler.py +++ b/file_handler.py @@ -9,11 +9,13 @@ from PIL import Image def create_hash_name(filename: str): + # TODO: Hash from file data return str(hashlib.sha1(filename.encode()).hexdigest()) async def save_torrent_file(torrent: UploadFile): - if(torrent.filename is None): raise ValueError("Filename not found") + if (torrent.filename is None): + raise ValueError("Filename not found") hash_filename = create_hash_name(torrent.filename)+".torrent" async with aiofiles.open(Path() / "content" / "torrent" / hash_filename, 'wb') as file: @@ -25,13 +27,17 @@ async def save_torrent_file(torrent: UploadFile): async def save_image(cover: UploadFile, type: Literal["cover", "screenshot"]): - if(cover.filename is None): raise ValueError("Filename not found") - if(cover.content_type is None): raise ValueError("File content type unknown") + if (cover.filename is None): + raise ValueError("Filename not found") + if (cover.content_type is None): + raise ValueError("File content type unknown") hash_filename = create_hash_name(cover.filename) file_extension = mimetypes.guess_extension(cover.content_type) - if (file_extension is None): raise NameError("File extension not found") - else: hash_filename += file_extension + if (file_extension is None): + raise NameError("File extension not found") + else: + hash_filename += file_extension async with aiofiles.open(Path() / "content" / "images" / type / "full_size" / hash_filename, 'wb') as full_size_file, \ diff --git a/routes/games.py b/routes/games.py index 289c7f2..5afa148 100644 --- a/routes/games.py +++ b/routes/games.py @@ -14,6 +14,14 @@ async def get_games(db: AsyncSession = Depends(get_session)): raise HTTPException(500) +@games_router.get("/cards", response_model=list[GameCard]) +async def get_games_cards(db: AsyncSession = Depends(get_session)): + try: + return await crud.get_games(db) + except Exception: + raise HTTPException(500) + + @games_router.get("/{game_id}", response_model=Game) async def get_game(game_id: int, db: AsyncSession = Depends(get_session)): return await crud.get_game(db, game_id)