satupeta-main/app/repositories/token_repository.py
2026-01-27 09:11:58 +07:00

40 lines
1.3 KiB
Python

from datetime import datetime
from fastapi_async_sqlalchemy import db
from pytz import timezone
from sqlalchemy import select
from uuid6 import UUID
from app.core.config import settings
from app.models import RefreshTokenModel
from app.repositories import BaseRepository
class TokenRepository(BaseRepository[RefreshTokenModel]):
def __init__(self, model):
super().__init__(model)
async def find_valid_token(self, token: str, user_id: UUID):
query = select(self.model).where(
self.model.token == token,
self.model.user_id == str(user_id),
self.model.expires_at > datetime.now(timezone(settings.TIMEZONE)),
self.model.revoked == False,
)
result = await db.session.execute(query)
return result.scalars().first()
async def revoke_token(self, token: str):
token_obj = await self.find_by_token(token)
if token_obj:
token_obj.revoked = True
db.session.add(token_obj)
await db.session.commit()
return True
return False
async def find_by_token(self, token: str):
query = select(self.model).where(self.model.token == token)
result = await db.session.execute(query)
return result.scalars().first()