| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | from sqlmodel import selectfrom sqlalchemy.ext.asyncio import AsyncSessionfrom sqlalchemy.orm import Sessionfrom app.exceptions.exception import ResourceNotFoundErrorfrom app.libs import utilfrom app.models.token import Token, TokenCreate, TokenUpdateclass TokenService:    @staticmethod    async def create_token(session: AsyncSession, body: TokenCreate) -> Token:        db_token = Token.model_validate(body.model_dump(by_alias=True))        session.add(db_token)        await session.commit()        await session.refresh(db_token)        return db_token    @staticmethod    async def get_token(session: AsyncSession, token: str) -> Token:        statement = select(Token).where(Token.assistant_token == token)        result = await session.execute(statement)        token = result.scalars().one_or_none()        if token is None:            raise ResourceNotFoundError(message="Token not found")        return token    @staticmethod    def get_token_by_id(session: Session, token_id: str) -> Token:        statement = select(Token).where(Token.id == token_id)        result = session.execute(statement)        token = result.scalars().one_or_none()        if token is None:            raise ResourceNotFoundError(message="Token not found")        return token    @staticmethod    async def refresh_token(session: AsyncSession, token) -> Token:        db_token = await TokenService.get_token(session=session, token=token)        db_token.assistant_token = util.random_uuid()        session.add(db_token)        await session.commit()        await session.refresh(db_token)        return db_token    @staticmethod    async def modify_token(session: AsyncSession, body: TokenUpdate, token: str) -> Token:        db_token = await TokenService.get_token(session=session, token=token)        for key, value in body.model_dump(exclude_unset=True).items():            setattr(db_token, key, value)        session.add(db_token)        await session.commit()        await session.refresh(db_token)        return db_token
 |