feat: create user

This commit is contained in:
2024-08-05 01:46:22 +03:00
parent 58220a246b
commit 93b0315b4a
3 changed files with 55 additions and 3 deletions

View File

@@ -31,3 +31,15 @@ async def update(
request: UpdateUserRequest
):
return await UserService(session).update(request)
@user_router.post(
'/create',
response_model=CreateUserResponse,
operation_id='create_user'
)
async def create(
session: SessionDependency,
request: CreateUserRequest
):
return await UserService(session).create(request)

View File

@@ -8,9 +8,7 @@ from schemas.role import RoleSchema
# region Entities
class BaseUser(BaseSchema):
id: int
class BasicUser(BaseSchema):
telegram_id: int
phone_number: str | None = None
first_name: str
@@ -24,6 +22,10 @@ class BaseUser(BaseSchema):
pay_rate: Optional[PayRateSchema] = None
class BaseUser(BasicUser):
id: int
class UserSchema(BaseUser):
role: RoleSchema
position: Optional[PositionSchema] = None
@@ -33,6 +35,10 @@ class UserUpdate(BaseUser):
position_key: Optional[str] = None
class UserCreate(BasicUser):
position_key: Optional[str] = None
# endregion
# region Requests
@@ -40,6 +46,10 @@ class UpdateUserRequest(BaseSchema):
data: UserUpdate
class CreateUserRequest(BaseSchema):
data: UserCreate
# endregion
# region Responses
@@ -49,4 +59,8 @@ class GetAllUsersResponse(BaseSchema):
class UpdateUserResponse(OkMessageSchema):
pass
class CreateUserResponse(OkMessageSchema):
pass
# endregion

View File

@@ -19,6 +19,32 @@ class UserService(BaseService):
async def get_by_id(self, user_id: int) -> Optional[User]:
return await self.session.scalar(select(User).where(User.id == user_id))
async def create(self, request: CreateUserRequest) -> CreateUserResponse:
try:
base_fields = request.data.model_dump_parent()
del base_fields['pay_rate']
user = User(**base_fields)
self.session.add(user)
await self.session.flush()
if request.data.position_key:
stmt = insert(user_position).values(**{
'user_id': user.id,
'position_key': request.data.position_key
})
await self.session.execute(stmt)
if request.data.pay_rate:
stmt = insert(user_pay_rate).values(**{
'user_id': user.id,
'pay_rate_id': request.data.pay_rate.id
})
await self.session.execute(stmt)
await self.session.commit()
return UpdateUserResponse(ok=True, message='Пользователь успешно обновлен')
except Exception as e:
return CreateUserResponse(ok=False, message=str(e))
async def update(self, request: UpdateUserRequest) -> UpdateUserResponse:
try:
if not await self.get_by_id(request.data.id):