VORKOUT-7 #9
@ -21,7 +21,14 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -
|
||||
first_user = page*limit-(limit)
|
||||
|
||||
ivan.dev marked this conversation as resolved
Outdated
|
||||
query = (
|
||||
select(account_table.c.id, account_table.c.login)
|
||||
select(account_table.c.id,
|
||||
ivan.dev marked this conversation as resolved
Outdated
mikhail.dev
commented
1. Тебе нужен адаптер для `list[AllUser]`. В текущем виде это не имеет смысла, это равносильно простому созданию класса по кейвордам.
2. В документации написано, что такие конструкции лучше создавать один раз, соответственно стоит их делать глобальными тогда.
|
||||
account_table.c.name,
|
||||
account_table.c.login,
|
||||
account_table.c.email,
|
||||
account_table.c.bind_tenant_id,
|
||||
account_table.c.role,
|
||||
account_table.c.created_at,
|
||||
ivan.dev marked this conversation as resolved
Outdated
vlad.dev
commented
Можно вместо этого использовать Можно вместо этого использовать `parse_obj_as` из `pydantic.tools`, чтобы парсить запрос сразу из бд в модель `User`
Можешь посмотреть в [репозитории](https://gitea.heado.ru/dinar/backend/src/branch/master/backend/db/logic/issues.py#L93) бэка
mikhail.dev
commented
`parse_obj_as` устарело в Pydantic 2, не используйте это. Для подобных целей создали [TypeAdapter](https://docs.pydantic.dev/2.11/concepts/type_adapter/).
|
||||
account_table.c.status)
|
||||
.order_by(account_table.c.id)
|
||||
.offset(first_user)
|
||||
.limit(limit)
|
||||
@ -36,8 +43,17 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -
|
||||
total_count = count_result.scalar()
|
||||
total_pages = math.ceil(total_count / limit)
|
||||
|
||||
|
||||
print(users_data)
|
||||
validated_users = all_user_adapter.validate_python(
|
||||
[{"id": u.id, "login": u.login} for u in users_data]
|
||||
[{"id": u.id,
|
||||
ivan.dev marked this conversation as resolved
Outdated
mikhail.dev
commented
Тут нужно вернуть обыкновенное заполнение класса и его возврат. Тут нужно вернуть обыкновенное заполнение класса и его возврат.
mikhail.dev
commented
Так сразу Так сразу `users_data` можно сюда передать? На худой случай [._asdict()](https://docs.sqlalchemy.org/en/20/core/connections.html#sqlalchemy.engine.Row._asdict) есть.
|
||||
"name": u.name,
|
||||
"login": u.login,
|
||||
"email": u.email,
|
||||
"bind_tenant_id": u.bind_tenant_id,
|
||||
"role": u.role.name,
|
||||
"created_at": u.created_at,
|
||||
"status": u.status.name} for u in users_data]
|
||||
)
|
||||
|
||||
return AllUserResponse(
|
||||
|
@ -31,7 +31,14 @@ class UserUpdate(BaseModel):
|
||||
|
||||
class AllUser(BaseModel):
|
||||
id: int
|
||||
name: str
|
||||
login: str
|
||||
email: EmailStr
|
||||
ivan.dev marked this conversation as resolved
Outdated
vlad.dev
commented
`email` и `bind_tenant_id` в бд определены так, что могут быть `None`, поэтому тут надо тоже это описать, а то, например, пользователь `vorkout` не проходит валидацию
|
||||
bind_tenant_id: str
|
||||
role: Role
|
||||
created_at: datetime
|
||||
status: Status
|
||||
|
||||
|
||||
class AllUserResponse(BaseModel):
|
||||
users: List[AllUser]
|
||||
|
Loading…
Reference in New Issue
Block a user
Давай все-таки через
offset
делать, а то вычислять поid
как-то сомнительно выглядит