token.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from sqlmodel import select
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from sqlalchemy.orm import Session
  4. from app.exceptions.exception import ResourceNotFoundError
  5. from app.libs import util
  6. from app.models.token import Token, TokenCreate, TokenUpdate
  7. class TokenService:
  8. @staticmethod
  9. async def create_token(session: AsyncSession, body: TokenCreate) -> Token:
  10. db_token = Token.model_validate(body.model_dump(by_alias=True))
  11. session.add(db_token)
  12. await session.commit()
  13. await session.refresh(db_token)
  14. return db_token
  15. @staticmethod
  16. async def get_token(session: AsyncSession, token: str) -> Token:
  17. statement = select(Token).where(Token.assistant_token == token)
  18. result = await session.execute(statement)
  19. token = result.scalars().one_or_none()
  20. # if token is None:
  21. # raise ResourceNotFoundError(message="Token not found")
  22. return token
  23. @staticmethod
  24. def get_token_by_id(session: Session, token_id: str) -> Token:
  25. statement = select(Token).where(Token.id == token_id)
  26. result = session.execute(statement)
  27. token = result.scalars().one_or_none()
  28. # if token is None:
  29. # raise ResourceNotFoundError(message="Token not found")
  30. return token
  31. @staticmethod
  32. async def refresh_token(session: AsyncSession, token) -> Token:
  33. db_token = await TokenService.get_token(session=session, token=token)
  34. db_token.assistant_token = util.random_uuid()
  35. session.add(db_token)
  36. await session.commit()
  37. await session.refresh(db_token)
  38. return db_token
  39. @staticmethod
  40. async def modify_token(
  41. session: AsyncSession, body: TokenUpdate, token: str
  42. ) -> Token:
  43. db_token = await TokenService.get_token(session=session, token=token)
  44. for key, value in body.model_dump(exclude_unset=True).items():
  45. setattr(db_token, key, value)
  46. session.add(db_token)
  47. await session.commit()
  48. await session.refresh(db_token)
  49. return db_token