assistant_file.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from sqlmodel import select
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from app.exceptions.exception import ResourceNotFoundError
  4. from app.models.assistant_file import (
  5. AssistantFile,
  6. AssistantFileCreate,
  7. AssistantFileUpdate,
  8. )
  9. from app.schemas.common import DeleteResponse
  10. class AssistantFileService:
  11. @staticmethod
  12. async def create_assistant_file(
  13. *, session: AsyncSession, assistant_id: str, body: AssistantFileCreate
  14. ) -> AssistantFile:
  15. # TODO 关系表暂时不实现
  16. return AssistantFile(id="", assistant_id=assistant_id)
  17. @staticmethod
  18. async def modify_assistant_file(
  19. *, session: AsyncSession, assistant_id: str, body: AssistantFileUpdate
  20. ) -> AssistantFile:
  21. db_assistant = await AssistantFileService.get_assistant_file(
  22. session=session, assistant_id=assistant_id, file_id=body.id
  23. )
  24. update_data = body.dict(exclude_unset=True)
  25. for key, value in update_data.items():
  26. setattr(db_assistant, key, value)
  27. session.add(db_assistant)
  28. await session.commit()
  29. await session.refresh(db_assistant)
  30. return db_assistant
  31. @staticmethod
  32. async def delete_assistant_file(*, session: AsyncSession, assistant_id: str, file_id: str) -> DeleteResponse:
  33. assistant_file = await AssistantFileService.get_assistant_file(
  34. session=session, assistant_id=assistant_id, file_id=file_id
  35. )
  36. id = assistant_file.id
  37. await session.delete(assistant_file)
  38. await session.commit()
  39. return DeleteResponse(id=id, object="assistant_file.deleted", deleted=True)
  40. @staticmethod
  41. async def get_assistant_file(*, session: AsyncSession, assistant_id: str, file_id: str) -> AssistantFile:
  42. statement = select(AssistantFile).where(AssistantFile.id == assistant_id).where(AssistantFile.id == file_id)
  43. result = await session.execute(statement)
  44. assistant_file = result.scalars().one_or_none()
  45. if assistant_file is None:
  46. raise ResourceNotFoundError(message=f"Assistant file-{file_id} not found")
  47. return session.exec(statement).one_or_none()