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: Create custom exceptions
@api.get("/all", response_model=List[User], tags=["Users"])
def get_all(user_id: str, user_svc: UserService = Depends()):
subject = user_svc.get_user_by_uuid(user_id)
def get_all(uuid: str, 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}")
@ -28,3 +28,12 @@ def get_all(user_id: str, user_svc: UserService = Depends()):
@api.get("/{user_id}", response_model=User, tags=["Users"])
def get_by_uuid(user_id: str, user_svc: UserService = Depends()):
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(
ARRAY(Enum(ProgramTypeEnum)), nullable=False
)
experience: Mapped[int] = mapped_column(Integer, nullable=False)
group: Mapped[str] = mapped_column(String(50))
experience: Mapped[int] = mapped_column(Integer, nullable=True)
group: Mapped[str] = mapped_column(String(50), nullable=True)
uuid: Mapped[str] = mapped_column(String, nullable=True)
@classmethod

View File

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

View File

@ -61,22 +61,21 @@ class UserService:
"""
try:
if (user.id != None):
if user.id != None:
user = self.get_user_by_id(user.id)
else:
user_entity = UserEntity.from_model(user)
# add new user to table
self._session.add(user_entity)
self._session.commit()
except:
# if does not exist, create new object
user_entity = UserEntity.from_model(user)
raise Exception(f"Failed to create user")
# add new user to table
self._session.add(user_entity)
self._session.commit()
finally:
# return added object
return user
def delete(self, user: User) -> None:
return user
def delete(self, user: User) -> None:
"""
Delete a user
Delete a user
Args: the user to delete
@ -86,25 +85,23 @@ class UserService:
if obj is None:
raise Exception(f"No matching user found")
self._session.delete(obj)
self._session.commit()
def update(self, user: User) -> User:
def update(self, user: User) -> User:
"""
Updates a user
Args: User to be updated
Returns: The updated User
"""
"""
obj = self._session.get(UserEntity, user.id)
if obj is None:
raise Exception(f"No matching user found")
obj.username = user.username
obj.role = user.role
obj.email = user.email
@ -115,5 +112,3 @@ class UserService:
self._session.commit()
return obj.to_model()