Добавил фильтр в получение юзеров

This commit is contained in:
urec56 2024-06-18 20:45:14 +05:00
parent 1d7e9a67d8
commit ff3d159e5f
3 changed files with 17 additions and 4 deletions

View file

@ -49,7 +49,7 @@ class UserDAO(BaseDAO):
except NoResultFound:
raise UserNotFoundException
async def find_all(self) -> SUsers:
async def find_all(self, username: str) -> SUsers:
query = (
select(
func.json_build_object(
@ -67,7 +67,7 @@ class UserDAO(BaseDAO):
)
)
.select_from(Users)
.where(Users.role != 100)
.filter(Users.role != 100, Users.username.ilike(username))
)
result = await self.session.execute(query)
result = result.scalar_one()

View file

@ -32,6 +32,7 @@ from app.users.schemas import (
SUsers,
SConfirmationData,
SUserPassword,
SGetUsersFilter,
)
from app.tasks.tasks import (
send_registration_confirmation_email,
@ -48,9 +49,9 @@ router = APIRouter(prefix="/users", tags=["Пользователи"])
status_code=status.HTTP_200_OK,
response_model=SUsers,
)
async def get_all_users(uow=Depends(UnitOfWork)):
async def get_all_users(filter_by=Depends(SGetUsersFilter), uow=Depends(UnitOfWork)):
async with uow:
users = await uow.user.find_all()
users = await uow.user.find_all(username=filter_by.username)
return users

View file

@ -110,3 +110,15 @@ class SConfirmationData(BaseModel):
class SInvitationData(BaseModel):
chat_id: int
class SGetUsersFilter(BaseModel):
username: str | None = None
@field_validator("username") # noqa
@classmethod
def validate_username(cls, v):
if not v:
return "%"
else:
return f"%{v}%"