diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc index 06281cf..414005b 100644 Binary files a/__pycache__/main.cpython-313.pyc and b/__pycache__/main.cpython-313.pyc differ diff --git a/api/endpoints/__pycache__/assets_router.cpython-313.pyc b/api/endpoints/__pycache__/assets_router.cpython-313.pyc index 79f5d02..dd7f063 100644 Binary files a/api/endpoints/__pycache__/assets_router.cpython-313.pyc and b/api/endpoints/__pycache__/assets_router.cpython-313.pyc differ diff --git a/api/endpoints/__pycache__/generation_router.cpython-313.pyc b/api/endpoints/__pycache__/generation_router.cpython-313.pyc index 3c9f1b0..4ae2f69 100644 Binary files a/api/endpoints/__pycache__/generation_router.cpython-313.pyc and b/api/endpoints/__pycache__/generation_router.cpython-313.pyc differ diff --git a/api/endpoints/assets_router.py b/api/endpoints/assets_router.py index b9b2ae5..8b2ae0e 100644 --- a/api/endpoints/assets_router.py +++ b/api/endpoints/assets_router.py @@ -66,9 +66,9 @@ async def delete_asset( @router.get("") -async def get_assets(request: Request, dao: DAO = Depends(get_dao), limit: int = 10, offset: int = 0) -> AssetsResponse: +async def get_assets(request: Request, dao: DAO = Depends(get_dao), type: Optional[str] = None, limit: int = 10, offset: int = 0) -> AssetsResponse: logger.info(f"get_assets called. Limit: {limit}, Offset: {offset}") - assets = await dao.assets.get_assets(limit, offset) + assets = await dao.assets.get_assets(type, limit, offset) # assets = await dao.assets.get_assets() # This line seemed redundant/conflicting in original code total_count = await dao.assets.get_asset_count() diff --git a/api/endpoints/generation_router.py b/api/endpoints/generation_router.py index 0b4a092..575ba5c 100644 --- a/api/endpoints/generation_router.py +++ b/api/endpoints/generation_router.py @@ -7,7 +7,7 @@ from starlette.requests import Request from api import service from api.dependency import get_generation_service -from api.models.GenerationRequest import GenerationResponse, GenerationRequest, PromptResponse, PromptRequest +from api.models.GenerationRequest import GenerationResponse, GenerationRequest, GenerationsResponse, PromptResponse, PromptRequest from api.service.generation_service import GenerationService from models.Generation import Generation @@ -43,7 +43,7 @@ async def prompt_from_image( return PromptResponse(prompt=generated_prompt) -@router.get("", response_model=List[GenerationResponse]) +@router.get("", response_model=GenerationsResponse) async def get_generations(character_id: Optional[str] = None, limit: int = 10, offset: int = 0, generation_service: GenerationService = Depends(get_generation_service)): logger.info(f"get_generations called. CharacterId: {character_id}, Limit: {limit}, Offset: {offset}") diff --git a/api/models/GenerationRequest.py b/api/models/GenerationRequest.py index b9f1469..45e9d06 100644 --- a/api/models/GenerationRequest.py +++ b/api/models/GenerationRequest.py @@ -18,6 +18,11 @@ class GenerationRequest(BaseModel): assets_list: List[str] +class GenerationsResponse(BaseModel): + generations: List["GenerationResponse"] + total_count: int + + class GenerationResponse(BaseModel): id: str status: GenerationStatus diff --git a/api/models/__pycache__/GenerationRequest.cpython-313.pyc b/api/models/__pycache__/GenerationRequest.cpython-313.pyc index 76e1265..daf9354 100644 Binary files a/api/models/__pycache__/GenerationRequest.cpython-313.pyc and b/api/models/__pycache__/GenerationRequest.cpython-313.pyc differ diff --git a/api/service/__pycache__/generation_service.cpython-313.pyc b/api/service/__pycache__/generation_service.cpython-313.pyc index 041fbd7..c8001aa 100644 Binary files a/api/service/__pycache__/generation_service.cpython-313.pyc and b/api/service/__pycache__/generation_service.cpython-313.pyc differ diff --git a/api/service/generation_service.py b/api/service/generation_service.py index 7b31ba9..d098a6b 100644 --- a/api/service/generation_service.py +++ b/api/service/generation_service.py @@ -9,7 +9,7 @@ from aiogram import Bot from aiogram.types import BufferedInputFile from adapters.Exception import GoogleGenerationException from adapters.google_adapter import GoogleAdapter -from api.models.GenerationRequest import GenerationRequest, GenerationResponse +from api.models.GenerationRequest import GenerationRequest, GenerationResponse, GenerationsResponse # Импортируйте ваши модели DAO, Asset, Generation корректно from models.Asset import Asset, AssetType, AssetContentType from models.Generation import Generation, GenerationStatus @@ -94,7 +94,10 @@ class GenerationService: async def get_generations(self, character_id: Optional[str] = None, limit: int = 10, offset: int = 0) -> List[ Generation]: - return await self.dao.generations.get_generations(character_id = character_id,limit=limit, offset=offset) + generations = await self.dao.generations.get_generations(character_id = character_id,limit=limit, offset=offset) + total_count = await self.dao.generations.count_generations(character_id = character_id) + generations = [GenerationResponse(**gen.model_dump()) for gen in generations] + return GenerationsResponse(generations=generations, total_count=total_count) async def get_generation(self, generation_id: str) -> Optional[GenerationResponse]: gen = await self.dao.generations.get_generation(generation_id) diff --git a/main.py b/main.py index 1855801..2a86438 100644 --- a/main.py +++ b/main.py @@ -51,7 +51,8 @@ ADMIN_ID = int(os.getenv("ADMIN_ID", 0)) def setup_logging(): logging.basicConfig(level=logging.INFO, - format="%(asctime)s [%(levelname)s] %(name)s: %(message)s") + format="%(asctime)s [%(levelname)s] %(name)s (%(filename)s:%(lineno)d): %(message)s", + force=True) # --- ИНИЦИАЛИЗАЦИЯ ЗАВИСИМОСТЕЙ --- @@ -115,6 +116,7 @@ gen_router.message.middleware(AlbumMiddleware(latency=0.8)) @asynccontextmanager async def lifespan(app: FastAPI): # --- STARTUP --- + setup_logging() print("🚀 Starting up...") # 1. Настройка DAO для FastAPI diff --git a/repos/__pycache__/assets_repo.cpython-313.pyc b/repos/__pycache__/assets_repo.cpython-313.pyc index fa07fdb..3ae1148 100644 Binary files a/repos/__pycache__/assets_repo.cpython-313.pyc and b/repos/__pycache__/assets_repo.cpython-313.pyc differ diff --git a/repos/__pycache__/generation_repo.cpython-313.pyc b/repos/__pycache__/generation_repo.cpython-313.pyc index f64f0d8..caf2943 100644 Binary files a/repos/__pycache__/generation_repo.cpython-313.pyc and b/repos/__pycache__/generation_repo.cpython-313.pyc differ diff --git a/repos/assets_repo.py b/repos/assets_repo.py index 5eadc2b..6f9cb62 100644 --- a/repos/assets_repo.py +++ b/repos/assets_repo.py @@ -46,7 +46,10 @@ class AssetsRepo: res = await self.collection.insert_one(asset.model_dump()) return str(res.inserted_id) - async def get_assets(self, limit: int = 10, offset: int = 0, with_data: bool = False) -> List[Asset]: + async def get_assets(self, asset_type: Optional[str] = None, limit: int = 10, offset: int = 0, with_data: bool = False) -> List[Asset]: + filter = {} + if asset_type: + filter["type"] = asset_type args = {} if not with_data: args["data"] = 0 @@ -68,7 +71,7 @@ class AssetsRepo: # So list DOES NOT return thumbnails by default. args["thumbnail"] = 0 - res = await self.collection.find({}, args).sort("created_at", -1).skip(offset).limit(limit).to_list(None) + res = await self.collection.find(filter, args).sort("created_at", -1).skip(offset).limit(limit).to_list(None) assets = [] for doc in res: doc["id"] = str(doc.pop("_id")) diff --git a/repos/generation_repo.py b/repos/generation_repo.py index eefe10d..fe4393e 100644 --- a/repos/generation_repo.py +++ b/repos/generation_repo.py @@ -39,5 +39,13 @@ class GenerationRepo: generations.append(Generation(**generation)) return generations + async def count_generations(self, character_id: Optional[str] = None, status: Optional[GenerationStatus] = None) -> int: + args = {} + if character_id is not None: + args["linked_character_id"] = character_id + if status is not None: + args["status"] = status + return await self.collection.count_documents(args) + async def update_generation(self, generation: Generation, ): res = await self.collection.update_one({"_id": ObjectId(generation.id)}, {"$set": generation.model_dump()})