Add create user endpoint and update model/entity

This commit is contained in:
pmoharana-cmd 2025-01-04 16:10:09 -05:00
parent dff05af79c
commit 415206ad1a
4 changed files with 32 additions and 28 deletions

View File

@ -16,8 +16,8 @@ openapi_tags = {
# TODO: Enable authorization by passing user uuid to API # TODO: Enable authorization by passing user uuid to API
# TODO: Create custom exceptions # TODO: Create custom exceptions
@api.get("/all", response_model=List[User], tags=["Users"]) @api.get("/all", response_model=List[User], tags=["Users"])
def get_all(user_id: str, user_svc: UserService = Depends()): def get_all(uuid: str, user_svc: UserService = Depends()):
subject = user_svc.get_user_by_uuid(user_id) subject = user_svc.get_user_by_uuid(uuid)
if subject.role != UserTypeEnum.ADMIN: if subject.role != UserTypeEnum.ADMIN:
raise Exception(f"Insufficient permissions for user {subject.uuid}") raise Exception(f"Insufficient permissions for user {subject.uuid}")
@ -28,3 +28,12 @@ def get_all(user_id: str, user_svc: UserService = Depends()):
@api.get("/{user_id}", response_model=User, tags=["Users"]) @api.get("/{user_id}", response_model=User, tags=["Users"])
def get_by_uuid(user_id: str, user_svc: UserService = Depends()): def get_by_uuid(user_id: str, user_svc: UserService = Depends()):
return user_svc.get_user_by_uuid(user_id) return user_svc.get_user_by_uuid(user_id)
@api.post("/create", response_model=User, tags=["Users"])
def create_user(uuid: str, user: User, user_svc: UserService = Depends()):
subject = user_svc.get_user_by_uuid(uuid)
if subject.role != UserTypeEnum.ADMIN:
raise Exception(f"Insufficient permissions for user {subject.uuid}")
return user_svc.create(user)

View File

@ -38,8 +38,8 @@ class UserEntity(EntityBase):
program: Mapped[list[ProgramTypeEnum]] = mapped_column( program: Mapped[list[ProgramTypeEnum]] = mapped_column(
ARRAY(Enum(ProgramTypeEnum)), nullable=False ARRAY(Enum(ProgramTypeEnum)), nullable=False
) )
experience: Mapped[int] = mapped_column(Integer, nullable=False) experience: Mapped[int] = mapped_column(Integer, nullable=True)
group: Mapped[str] = mapped_column(String(50)) group: Mapped[str] = mapped_column(String(50), nullable=True)
uuid: Mapped[str] = mapped_column(String, nullable=True) uuid: Mapped[str] = mapped_column(String, nullable=True)
@classmethod @classmethod

View File

@ -10,9 +10,9 @@ class User(BaseModel):
id: int | None = None id: int | None = None
username: str = Field(..., description="The username of the user") username: str = Field(..., description="The username of the user")
email: str = Field(..., description="The e-mail of the user") email: str = Field(..., description="The e-mail of the user")
experience: int = Field(..., description="Years of Experience of the User") experience: int | None = Field(None, description="Years of Experience of the User")
group: str group: str | None = Field(None, description="The group of the user")
program: List[ProgramTypeEnum] program: List[ProgramTypeEnum] | None = None
role: UserTypeEnum role: UserTypeEnum | None = None
created_at: Optional[datetime] = datetime.now() created_at: Optional[datetime] = datetime.now()
uuid: str | None = None uuid: str | None = None

View File

@ -61,17 +61,16 @@ class UserService:
""" """
try: try:
if (user.id != None): if user.id != None:
user = self.get_user_by_id(user.id) user = self.get_user_by_id(user.id)
except: else:
# if does not exist, create new object
user_entity = UserEntity.from_model(user) user_entity = UserEntity.from_model(user)
# add new user to table # add new user to table
self._session.add(user_entity) self._session.add(user_entity)
self._session.commit() self._session.commit()
finally: except:
# return added object raise Exception(f"Failed to create user")
return user return user
def delete(self, user: User) -> None: def delete(self, user: User) -> None:
@ -90,8 +89,6 @@ class UserService:
self._session.delete(obj) self._session.delete(obj)
self._session.commit() self._session.commit()
def update(self, user: User) -> User: def update(self, user: User) -> User:
""" """
Updates a user Updates a user
@ -115,5 +112,3 @@ class UserService:
self._session.commit() self._session.commit()
return obj.to_model() return obj.to_model()