VORKOUT-7 #9
No reviewers
Labels
No Label
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Vorkout/connect#9
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "VORKOUT-7"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -13,0 +19,4 @@
first_user = page*limit-(limit-1)
last_user = first_user+(limit-1)
query = select(account_table.c.id, account_table.c.login).where(account_table.c.id.between(first_user, last_user ))
Давай все-таки через
offset
делать, а то вычислять поid
как-то сомнительно выглядит@ -13,0 +27,4 @@
user_list = [{'id': user.id, 'login': user.login} for user in users]
user_models = [AllUser(id=user['id'], login=user['login']) for user in user_list]
Можно вместо этого использовать
parse_obj_as
изpydantic.tools
, чтобы парсить запрос сразу из бд в модельUser
Можешь посмотреть в репозитории бэка
parse_obj_as
устарело в Pydantic 2, не используйте это. Для подобных целей создали TypeAdapter.@ -13,0 +21,4 @@
"""
user_adapter = TypeAdapter(AllUser)
response_adapter = TypeAdapter(AllUserResponse)
list[AllUser]
. В текущем виде это не имеет смысла, это равносильно простому созданию класса по кейвордам.@ -13,0 +46,4 @@
for u in users_data
]
return response_adapter.validate_python({
Тут нужно вернуть обыкновенное заполнение класса и его возврат.
@ -13,0 +37,4 @@
total_pages = math.ceil(total_count / limit)
validated_users = all_user_adapter.validate_python(
[{"id": u.id, "login": u.login} for u in users_data]
А почему ты только эти поля селектишь? Просто для теста взял?
Да.
@ -13,0 +46,4 @@
print(users_data)
validated_users = all_user_adapter.validate_python(
[{"id": u.id,
Так сразу
users_data
можно сюда передать? На худой случай ._asdict() есть.@ -13,0 +13,4 @@
from api.schemas.endpoints.account import AllUserResponse, all_user_adapter
async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -> Optional[User]:
Надо переименовать метод и изменить описание, сейчас же не только
login
иid
@ -13,3 +63,4 @@
)
async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]:
Вот эти методы я бы тоже переименовал на что-то по типу
get_user_by_id
, а то, как по мне, не особо читаемоНо сам смотри, если тебе так удобнее, то оставляй
@ -31,0 +33,4 @@
id: int
name: str
login: str
email: EmailStr
email
иbind_tenant_id
в бд определены так, что могут бытьNone
, поэтому тут надо тоже это описать, а то, например, пользовательvorkout
не проходит валидацию@ -25,3 +5,4 @@
from api.db.tables.account import AccountRole,AccountStatus
class User(Base):
Нет импорта для
Base
Надо наследовать от нашего
Base
, а не того, который изpydantic
@ -24,3 +5,4 @@
from api.db.tables.account import KeyType,KeyStatus
class AccountKeyring(Base):
Нет импорта
Base
Тоже самое что и с
User
схемой@ -23,4 +8,2 @@
DELETED = "DELETED"
class UserUpdate(Base):
Тут тоже с импортами какая-то путаница
@ -24,3 +5,4 @@
from api.db.tables.account import KeyType,KeyStatus
class AccountKeyringUpdate(Base):
Не хватает испорта
Base
@ -16,2 +16,4 @@
class Refresh(Base):
refresh_token: str
class Access(BaseModel):
Тут не от того класса наследуется