feat: create user
This commit is contained in:
@@ -31,3 +31,15 @@ async def update(
|
|||||||
request: UpdateUserRequest
|
request: UpdateUserRequest
|
||||||
):
|
):
|
||||||
return await UserService(session).update(request)
|
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)
|
||||||
|
|||||||
@@ -8,9 +8,7 @@ from schemas.role import RoleSchema
|
|||||||
|
|
||||||
# region Entities
|
# region Entities
|
||||||
|
|
||||||
|
class BasicUser(BaseSchema):
|
||||||
class BaseUser(BaseSchema):
|
|
||||||
id: int
|
|
||||||
telegram_id: int
|
telegram_id: int
|
||||||
phone_number: str | None = None
|
phone_number: str | None = None
|
||||||
first_name: str
|
first_name: str
|
||||||
@@ -24,6 +22,10 @@ class BaseUser(BaseSchema):
|
|||||||
pay_rate: Optional[PayRateSchema] = None
|
pay_rate: Optional[PayRateSchema] = None
|
||||||
|
|
||||||
|
|
||||||
|
class BaseUser(BasicUser):
|
||||||
|
id: int
|
||||||
|
|
||||||
|
|
||||||
class UserSchema(BaseUser):
|
class UserSchema(BaseUser):
|
||||||
role: RoleSchema
|
role: RoleSchema
|
||||||
position: Optional[PositionSchema] = None
|
position: Optional[PositionSchema] = None
|
||||||
@@ -33,6 +35,10 @@ class UserUpdate(BaseUser):
|
|||||||
position_key: Optional[str] = None
|
position_key: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class UserCreate(BasicUser):
|
||||||
|
position_key: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
# region Requests
|
# region Requests
|
||||||
@@ -40,6 +46,10 @@ class UpdateUserRequest(BaseSchema):
|
|||||||
data: UserUpdate
|
data: UserUpdate
|
||||||
|
|
||||||
|
|
||||||
|
class CreateUserRequest(BaseSchema):
|
||||||
|
data: UserCreate
|
||||||
|
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
# region Responses
|
# region Responses
|
||||||
@@ -49,4 +59,8 @@ class GetAllUsersResponse(BaseSchema):
|
|||||||
|
|
||||||
class UpdateUserResponse(OkMessageSchema):
|
class UpdateUserResponse(OkMessageSchema):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CreateUserResponse(OkMessageSchema):
|
||||||
|
pass
|
||||||
# endregion
|
# endregion
|
||||||
|
|||||||
@@ -19,6 +19,32 @@ class UserService(BaseService):
|
|||||||
async def get_by_id(self, user_id: int) -> Optional[User]:
|
async def get_by_id(self, user_id: int) -> Optional[User]:
|
||||||
return await self.session.scalar(select(User).where(User.id == user_id))
|
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:
|
async def update(self, request: UpdateUserRequest) -> UpdateUserResponse:
|
||||||
try:
|
try:
|
||||||
if not await self.get_by_id(request.data.id):
|
if not await self.get_by_id(request.data.id):
|
||||||
|
|||||||
Reference in New Issue
Block a user