satupeta-main/app/repositories/user_repository.py
2026-02-23 12:20:42 +07:00

42 lines
1.5 KiB
Python
Executable File

from typing import List
from fastapi_async_sqlalchemy import db
from sqlalchemy import select, update
from uuid6 import UUID
from app.models import UserModel
from . import BaseRepository
class UserRepository(BaseRepository[UserModel]):
def __init__(self, model):
super().__init__(model)
async def find_by_username(self, username: str) -> UserModel | None:
query = select(self.model).filter(self.model.username == username)
result = await db.session.execute(query)
return result.scalar_one_or_none()
async def find_by_email(self, email: str) -> UserModel | None:
query = select(self.model).filter(self.model.email == email)
result = await db.session.execute(query)
return result.scalar_one_or_none()
async def find_by_id(self, id: UUID) -> UserModel | None:
query = select(self.model).filter(self.model.id == id)
result = await db.session.execute(query)
return result.scalar_one_or_none()
async def find_all_ids(self, list_id: List) -> List[UserModel]:
query = select(self.model.id)
query = query.where(self.model.id.in_(list_id))
result = await db.session.execute(query)
return result.scalars().all()
async def bulk_update_activation(self, user_ids: List[UUID], is_active: bool) -> None:
for user_id in user_ids:
await db.session.execute(update(self.model).where(self.model.id == user_id).values(is_active=is_active))
await db.session.commit()