Fix user creating

This commit is contained in:
2021-12-28 23:16:31 +03:00
parent d875ac8cba
commit 44cbfc4f59
2 changed files with 10 additions and 7 deletions

View File

@@ -11,15 +11,16 @@ class LanguageDetail(CreateLanguage):
class UserBase(BaseModel): class UserBase(BaseModel):
user_id: int
last_name: constr(max_length=64) # type: ignore last_name: constr(max_length=64) # type: ignore
first_name: constr(max_length=64) # type: ignore first_name: constr(max_length=64) # type: ignore
username: constr(max_length=32) # type: ignore username: constr(max_length=32) # type: ignore
source: constr(max_length=32) # type: ignore
class UserCreateOrUpdate(BaseModel): class UserCreateOrUpdate(UserBase):
allowed_langs: list[str] allowed_langs: list[str]
class UserDetail(UserCreateOrUpdate): class UserDetail(BaseModel):
user_id: int
allowed_langs: list[LanguageDetail] allowed_langs: list[LanguageDetail]

View File

@@ -34,7 +34,7 @@ async def get_user(user_id: int):
@users_router.post("/{user_id}", response_model=UserDetail) @users_router.post("/{user_id}", response_model=UserDetail)
async def get_or_update_user(user_id: int, data: UserCreateOrUpdate): async def create_or_update_user(user_id: int, data: UserCreateOrUpdate):
data_dict = data.dict() data_dict = data.dict()
user_data = await User.objects.select_related("allowed_langs").get_or_none(user_id=user_id) user_data = await User.objects.select_related("allowed_langs").get_or_none(user_id=user_id)
@@ -42,17 +42,19 @@ async def get_or_update_user(user_id: int, data: UserCreateOrUpdate):
allowed_langs = data_dict.pop("allowed_langs") allowed_langs = data_dict.pop("allowed_langs")
if user_data is None: if user_data is None:
return User.objects.create(**data.dict()) user_data = await User.objects.select_related("allowed_langs").create(**{**data_dict, "user_id": user_id})
else: else:
user_data.update_from_dict(data.dict()) user_data.update_from_dict(data_dict)
user_data.allowed_langs.clear() await user_data.allowed_langs.clear() # type: ignore
langs = await Language.objects.filter(code__in=allowed_langs).all() langs = await Language.objects.filter(code__in=allowed_langs).all()
for lang in langs: for lang in langs:
await user_data.allowed_langs.add(lang) await user_data.allowed_langs.add(lang)
await user_data.update()
return user_data return user_data