asyncio style refactoring

This commit is contained in:
2026-08-05 14:46:10 +03:00
parent 2da58c7483
commit 5ec033a21d
16 changed files with 280 additions and 237 deletions
+19 -18
View File
@@ -2,6 +2,7 @@
from uuid import UUID
from sqlalchemy import and_, not_, select, update
from sqlalchemy.ext.asyncio import async_sessionmaker
from sqlalchemy.orm import sessionmaker
from src.models.database_models.model import RefreshTokens, engine
@@ -10,32 +11,32 @@ from src.models.pydantic_models.model import RefreshTokensOut
class JwtCrudActions:
def __init__(self) -> None:
self.Session=sessionmaker(bind=engine)
self.Session=async_sessionmaker(bind=engine)
def get_token_by_user_id(self, user_id:UUID)->RefreshTokensOut|None:
with self.Session() as session, session.begin():
async def get_token_by_user_id(self, user_id:UUID)->RefreshTokensOut|None:
async with self.Session() as session, session.begin():
query=select(RefreshTokens).where(and_(RefreshTokens.user_id==user_id, not_(RefreshTokens.is_revoked)))
response=session.scalars(query).first()
response= (await session.scalars(query)).first()
if response is None:
return None
return RefreshTokensOut.model_validate(response)
def get_token_by_id(self, token_id:UUID)->RefreshTokensOut|None:
with self.Session() as session, session.begin():
async def get_token_by_id(self, token_id:UUID)->RefreshTokensOut|None:
async with self.Session() as session, session.begin():
query=select(RefreshTokens).where(RefreshTokens.id==token_id)
response=session.scalars(query).one_or_none()
response= (await session.scalars(query)).one_or_none()
if response is None:
return None
return RefreshTokensOut.model_validate(response)
def create_token(self, data:dict)->None:
with self.Session() as session, session.begin():
async def create_token(self, data:dict)->None:
async with self.Session() as session, session.begin():
new_token=RefreshTokens(**data)
session.add(new_token)
def create_and_update_token(self, data: dict, old_jti: UUID, new_jti: UUID) -> bool:
with self.Session() as session, session.begin():
async def create_and_update_token(self, data: dict, old_jti: UUID, new_jti: UUID) -> bool:
async with self.Session() as session, session.begin():
new_token = RefreshTokens(**data)
query = (
@@ -44,7 +45,7 @@ class JwtCrudActions:
.values(is_revoked=True, replaced_by=new_jti)
.returning(RefreshTokens.id)
)
updated_id = session.execute(query).scalar_one_or_none()
updated_id = (await session.execute(query)).scalar_one_or_none()
if updated_id is None:
return False
@@ -53,15 +54,15 @@ class JwtCrudActions:
return True
def revoke_all(self, user_id:UUID)->bool:
with self.Session() as session, session.begin():
session.execute(update(RefreshTokens).where(RefreshTokens.user_id==user_id).values(is_revoked=True)) #bulk update
async def revoke_all(self, user_id:UUID)->bool:
async with self.Session() as session, session.begin():
await session.execute(update(RefreshTokens).where(RefreshTokens.user_id==user_id).values(is_revoked=True)) #bulk update
return True
def logout(self,token_id:UUID)->bool:
with self.Session() as session, session.begin():
async def logout(self,token_id:UUID)->bool:
async with self.Session() as session, session.begin():
query=select(RefreshTokens).where(RefreshTokens.id == token_id)
response=session.scalars(query).one_or_none()
response= (await session.scalars(query)).one_or_none()
if response is None:
return False
else: