diff --git a/database/crud/games.py b/database/crud/games.py index 0d920cb..d353c88 100644 --- a/database/crud/games.py +++ b/database/crud/games.py @@ -11,6 +11,7 @@ async def add_game(db: AsyncSession, game_info: sch.GameCreate, user_id: int): game = mdl.Game(**game_info.model_dump(), + update_date=strftime("%Y-%m-%d %H:%M:%S"), upload_date=strftime("%Y-%m-%d %H:%M:%S"), owner_id=user_id) return await add_transaction(db, game) diff --git a/database/models/__init__.py b/database/models/__init__.py new file mode 100644 index 0000000..b435c60 --- /dev/null +++ b/database/models/__init__.py @@ -0,0 +1,2 @@ +from .games import Game as Game +from .users import User as User \ No newline at end of file diff --git a/database/models.py b/database/models/games.py similarity index 70% rename from database/models.py rename to database/models/games.py index e56aef6..25f4957 100644 --- a/database/models.py +++ b/database/models/games.py @@ -1,23 +1,18 @@ - from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship -from .database import Base - +from ..database import Base class Game(Base): __tablename__ = "games" id = Column(Integer, primary_key=True) - cover = Column(String) title = Column(String, nullable=False, unique=True) + cover = Column(String) description = Column(String) torrent_file = Column(String, nullable=False) - language = Column(String) - version = Column(String) - download_size = Column(String) upload_date = Column(String, nullable=False) - release_date = Column(String) + trailer = Column(String) system = Column(String) processor = Column(String) @@ -25,16 +20,12 @@ class Game(Base): graphics = Column(String) storage = Column(String) + version = Column(String) + update_date = Column(String, nullable=False) + developer = Column(String) + language = Column(String) + release_date = Column(String) + download_size = Column(String) + owner_id = Column(Integer, ForeignKey("users.id")) owner = relationship("User", back_populates="games") - - -class User(Base): - __tablename__ = "users" - - id = Column(Integer, primary_key=True) - email = Column(String, nullable=False, unique=True) - name = Column(String, nullable=False) - hash_of_password = Column(String, nullable=False) - - games = relationship("Game", back_populates="owner") diff --git a/database/models/users.py b/database/models/users.py new file mode 100644 index 0000000..ea63ca9 --- /dev/null +++ b/database/models/users.py @@ -0,0 +1,14 @@ +from sqlalchemy import Column, Integer, String +from sqlalchemy.orm import relationship + +from ..database import Base + +class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True) + email = Column(String, nullable=False, unique=True) + name = Column(String, nullable=False) + hash_of_password = Column(String, nullable=False) + + games = relationship("Game", back_populates="owner") diff --git a/database/schemas/games.py b/database/schemas/games.py index 5b25d64..a3d0039 100644 --- a/database/schemas/games.py +++ b/database/schemas/games.py @@ -6,7 +6,7 @@ class GameCardBase(BaseModel): title: str cover: Optional[str] = None description: Optional[str] = None - release_date: Optional[str] = None + version: Optional[str] = None class GameCard(GameCardBase): @@ -15,9 +15,7 @@ class GameCard(GameCardBase): class GameBase(GameCardBase): torrent_file: str - language: Optional[str] = None - version: Optional[str] = None - download_size: Optional[str] = None + trailer: Optional[str] = None system: Optional[str] = None processor: Optional[str] = None @@ -25,6 +23,12 @@ class GameBase(GameCardBase): graphics: Optional[str] = None storage: Optional[str] = None + developer: Optional[str] = None + language: Optional[str] = None + release_date: Optional[str] = None + download_size: Optional[str] = None + + class GameCreate(GameBase): pass @@ -32,7 +36,8 @@ class GameCreate(GameBase): class Game(GameBase): id: int - upload_date: str | None + update_date: str + upload_date: str owner_id: int class Config: diff --git a/file_handler.py b/file_handler.py index e2aaea2..722b343 100644 --- a/file_handler.py +++ b/file_handler.py @@ -46,18 +46,34 @@ async def save_image(cover: UploadFile, type: Literal["cover", "screenshot"]): cover_data = await cover.read() if (isinstance(cover_data, str)): raise ValueError("Invalid image file") - await full_size_file.write(cover_data) - image = Image.open(BytesIO(cover_data)) - compressed_coefficient = (image.size[0] * image.size[1]) / (1280*720/4) + + cover_full_size = Image.open(BytesIO(cover_data)) + compressed_coefficient = (cover_full_size.size[0] * + cover_full_size.size[1]) / (1920*1080) if (compressed_coefficient < 1): compressed_coefficient = 1 - compressed_image = image.resize( - (int(image.size[0] / compressed_coefficient), - int(image.size[1] / compressed_coefficient)) + + cover_full_size = cover_full_size.resize( + (int(cover_full_size.size[0] / compressed_coefficient), + int(cover_full_size.size[1] / compressed_coefficient)) + ) + buf = BytesIO() + cover_full_size.save( + buf, format=cover.content_type.upper().replace("IMAGE/", "")) + await full_size_file.write(buf.getbuffer()) + + cover_preview = Image.open(BytesIO(cover_data)) + compressed_coefficient /= 4 + if (compressed_coefficient < 1): + compressed_coefficient = 1 + + cover_preview = cover_preview.resize( + (int(cover_preview.size[0] / compressed_coefficient), + int(cover_preview.size[1] / compressed_coefficient)) ) buf = BytesIO() - compressed_image.save( + cover_preview.save( buf, format=cover.content_type.upper().replace("IMAGE/", "")) await preview_file.write(buf.getbuffer()) return hash_filename