VORKOUT-7 #9

Merged
ivan.dev merged 12 commits from VORKOUT-7 into master 2025-06-05 16:29:14 +05:00
2 changed files with 25 additions and 2 deletions
Showing only changes of commit 31236d558f - Show all commits

View File

@ -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

Давай все-таки через offset делать, а то вычислять по id как-то сомнительно выглядит

Давай все-таки через `offset` делать, а то вычислять по `id` как-то сомнительно выглядит
query = (
select(account_table.c.id, account_table.c.login)
select(account_table.c.id,
ivan.dev marked this conversation as resolved Outdated
  1. Тебе нужен адаптер для list[AllUser]. В текущем виде это не имеет смысла, это равносильно простому созданию класса по кейвордам.
  2. В документации написано, что такие конструкции лучше создавать один раз, соответственно стоит их делать глобальными тогда.
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

Можно вместо этого использовать parse_obj_as из pydantic.tools, чтобы парсить запрос сразу из бд в модель User
Можешь посмотреть в репозитории бэка

Можно вместо этого использовать `parse_obj_as` из `pydantic.tools`, чтобы парсить запрос сразу из бд в модель `User` Можешь посмотреть в [репозитории](https://gitea.heado.ru/dinar/backend/src/branch/master/backend/db/logic/issues.py#L93) бэка

parse_obj_as устарело в Pydantic 2, не используйте это. Для подобных целей создали TypeAdapter.

`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

Тут нужно вернуть обыкновенное заполнение класса и его возврат.

Тут нужно вернуть обыкновенное заполнение класса и его возврат.

Так сразу users_data можно сюда передать? На худой случай ._asdict() есть.

Так сразу `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(

View File

@ -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

email и bind_tenant_id в бд определены так, что могут быть None, поэтому тут надо тоже это описать, а то, например, пользователь vorkout не проходит валидацию

`email` и `bind_tenant_id` в бд определены так, что могут быть `None`, поэтому тут надо тоже это описать, а то, например, пользователь `vorkout` не проходит валидацию
bind_tenant_id: str
role: Role
created_at: datetime
status: Status
class AllUserResponse(BaseModel):
users: List[AllUser]