Add game card

This commit is contained in:
2024-05-11 11:00:51 +04:00
parent fd5b19e6a9
commit 6ea6abad41
6 changed files with 35 additions and 25 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,6 @@
content
dev_database.db
run.bat
# Byte-compiled / optimized / DLL files
__pycache__/

View File

@@ -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)

View File

@@ -0,0 +1 @@
from .games import *

View File

@@ -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

View File

@@ -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, \

View File

@@ -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)