Merge pull request 'org-unit-user-create: список ССП и РФ при создании и обновлении юзеров' (#27) from org-unit-user-create into test
Reviewed-on: #27
This commit is contained in:
commit
1a533f46f1
@ -121,7 +121,7 @@ async def get_user(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@router.put("/", response_model=UserResponse)
|
@router.post("/", response_model=BaseSingleResponse[UserAdminListResponse])
|
||||||
async def create_user(
|
async def create_user(
|
||||||
user_data: UserCreate,
|
user_data: UserCreate,
|
||||||
db: AsyncSession = Depends(get_db),
|
db: AsyncSession = Depends(get_db),
|
||||||
@ -129,10 +129,15 @@ async def create_user(
|
|||||||
):
|
):
|
||||||
user_service = UserService(db)
|
user_service = UserService(db)
|
||||||
user = await user_service.create_user(user_data=user_data, creator=current_user)
|
user = await user_service.create_user(user_data=user_data, creator=current_user)
|
||||||
return UserResponse(success=True, message="Пользователь создан", result=user)
|
|
||||||
|
result = UserAdminListResponse.model_validate(user)
|
||||||
|
if user_data.load_orgs:
|
||||||
|
result.org_units = []
|
||||||
|
|
||||||
|
return BaseSingleResponse(success=True, message="Пользователь создан", result=result)
|
||||||
|
|
||||||
|
|
||||||
@router.patch("/{user_id}", response_model=UserResponse)
|
@router.patch("/{user_id}", response_model=BaseSingleResponse[UserAdminListResponse])
|
||||||
async def update_user(
|
async def update_user(
|
||||||
user_id: int,
|
user_id: int,
|
||||||
user_data: UserUpdate,
|
user_data: UserUpdate,
|
||||||
@ -145,7 +150,8 @@ async def update_user(
|
|||||||
user_data=user_data,
|
user_data=user_data,
|
||||||
user=current_user,
|
user=current_user,
|
||||||
)
|
)
|
||||||
return UserResponse(success=True, message="Пользователь обновлен", result=user)
|
result = UserAdminListResponse.model_validate(user)
|
||||||
|
return UserResponse(success=True, message="Пользователь обновлен", result=result)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{user_id}", response_model=UserResponse)
|
@router.delete("/{user_id}", response_model=UserResponse)
|
||||||
|
|||||||
@ -85,6 +85,7 @@ class UserBase(BaseModel):
|
|||||||
|
|
||||||
class UserCreate(UserBase):
|
class UserCreate(UserBase):
|
||||||
password: str | None = Field(default=None, examples=["pass123"])
|
password: str | None = Field(default=None, examples=["pass123"])
|
||||||
|
load_orgs: bool = Field(default=False)
|
||||||
|
|
||||||
model_config = ConfigDict(
|
model_config = ConfigDict(
|
||||||
json_schema_extra={
|
json_schema_extra={
|
||||||
@ -94,6 +95,7 @@ class UserCreate(UserBase):
|
|||||||
"full_name": "Иван Иванов",
|
"full_name": "Иван Иванов",
|
||||||
"role_id": 3,
|
"role_id": 3,
|
||||||
"password": "pass123",
|
"password": "pass123",
|
||||||
|
"load_orgs": True,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -116,6 +118,7 @@ class UserUpdate(BaseModel):
|
|||||||
)
|
)
|
||||||
role_id: Optional[int] = None
|
role_id: Optional[int] = None
|
||||||
is_active: Optional[bool] = True
|
is_active: Optional[bool] = True
|
||||||
|
load_orgs: bool = Field(default=False)
|
||||||
|
|
||||||
|
|
||||||
class UserInDB(UserBase):
|
class UserInDB(UserBase):
|
||||||
|
|||||||
@ -195,10 +195,15 @@ class UserRepository:
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
).scalar_one()
|
).scalar_one()
|
||||||
await self.db.commit()
|
await self.db.flush()
|
||||||
return await self.get(user_id)
|
return await self.get(user_id)
|
||||||
|
|
||||||
async def update(self, user_id: int, user_data: dict) -> Optional[AppUser]:
|
async def update(
|
||||||
|
self,
|
||||||
|
user_id: int,
|
||||||
|
user_data: dict,
|
||||||
|
load_orgs: bool = False,
|
||||||
|
) -> Optional[AppUser]:
|
||||||
user = await self.get(user_id)
|
user = await self.get(user_id)
|
||||||
if not user:
|
if not user:
|
||||||
return None
|
return None
|
||||||
@ -231,5 +236,7 @@ class UserRepository:
|
|||||||
"is_active": user_data.get("is_active"),
|
"is_active": user_data.get("is_active"),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
await self.db.commit()
|
await self.db.flush()
|
||||||
return await self.get(user_id)
|
self.db.expire(user)
|
||||||
|
result = await self.get(user_id, load_orgs=load_orgs)
|
||||||
|
return result
|
||||||
|
|||||||
@ -90,7 +90,11 @@ class UserService:
|
|||||||
if conflict:
|
if conflict:
|
||||||
raise UsernameConflictException()
|
raise UsernameConflictException()
|
||||||
|
|
||||||
updated = await self.user_repo.update(user_id, update_payload)
|
updated = await self.user_repo.update(
|
||||||
|
user_id=user_id,
|
||||||
|
user_data=update_payload,
|
||||||
|
load_orgs=user_data.load_orgs,
|
||||||
|
)
|
||||||
|
|
||||||
if role_id is not None and role is not None:
|
if role_id is not None and role is not None:
|
||||||
had_many_ssp_role = previous_role_id in (
|
had_many_ssp_role = previous_role_id in (
|
||||||
@ -107,7 +111,11 @@ class UserService:
|
|||||||
)
|
)
|
||||||
if (had_many_ssp_role and not has_many_ssp_role_now) or is_executor_to_dfip_transition:
|
if (had_many_ssp_role and not has_many_ssp_role_now) or is_executor_to_dfip_transition:
|
||||||
await self.user_repo.clear_many_ssp(user_id)
|
await self.user_repo.clear_many_ssp(user_id)
|
||||||
|
if user_data.load_orgs:
|
||||||
|
updated = self.user_repo.get(
|
||||||
|
user_id=user_id,
|
||||||
|
load_orgs=user_data.load_orgs,
|
||||||
|
)
|
||||||
return updated
|
return updated
|
||||||
|
|
||||||
async def delete_user(self, user_id: int, user: AppUser):
|
async def delete_user(self, user_id: int, user: AppUser):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user