This commit is contained in:
xds
2026-02-24 12:11:19 +03:00
parent f07105b0e5
commit bc9230a49b
8 changed files with 147 additions and 22 deletions

View File

@@ -100,29 +100,40 @@ class GenerationService:
return await asyncio.to_thread(self.gemini.generate_text, prompt=technical_prompt, images_list=images)
async def get_generations(self, **kwargs) -> GenerationsResponse:
current_user_id = kwargs.pop('current_user_id', None)
generations = await self.dao.generations.get_generations(**kwargs)
total_count = await self.dao.generations.count_generations(
character_id=kwargs.get('character_id'),
created_by=kwargs.get('created_by'),
project_id=kwargs.get('project_id'),
idea_id=kwargs.get('idea_id')
idea_id=kwargs.get('idea_id'),
only_liked_by=kwargs.get('only_liked_by')
)
return GenerationsResponse(
generations=[GenerationResponse(**gen.model_dump()) for gen in generations],
generations=[self._map_to_response(gen, current_user_id) for gen in generations],
total_count=total_count
)
async def get_generation(self, generation_id: str) -> Optional[GenerationResponse]:
async def get_generation(self, generation_id: str, current_user_id: Optional[str] = None) -> Optional[GenerationResponse]:
gen = await self.dao.generations.get_generation(generation_id)
return GenerationResponse(**gen.model_dump()) if gen else None
return self._map_to_response(gen, current_user_id) if gen else None
async def get_generations_by_group(self, group_id: str) -> GenerationGroupResponse:
async def toggle_like(self, generation_id: str, user_id: str) -> bool | None:
return await self.dao.generations.toggle_like(generation_id, user_id)
async def get_generations_by_group(self, group_id: str, current_user_id: Optional[str] = None) -> GenerationGroupResponse:
generations = await self.dao.generations.get_generations_by_group(group_id)
return GenerationGroupResponse(
generation_group_id=group_id,
generations=[GenerationResponse(**gen.model_dump()) for gen in generations]
generations=[self._map_to_response(gen, current_user_id) for gen in generations]
)
def _map_to_response(self, gen: Generation, current_user_id: Optional[str] = None) -> GenerationResponse:
res = GenerationResponse(**gen.model_dump())
res.likes_count = len(gen.liked_by) if gen.liked_by else 0
res.is_liked = current_user_id in gen.liked_by if current_user_id and gen.liked_by else False
return res
async def get_running_generations(self, user_id: Optional[str] = None, project_id: Optional[str] = None) -> List[Generation]:
return await self.dao.generations.get_generations(status=GenerationStatus.RUNNING, created_by=user_id, project_id=project_id)