mirror of
https://github.com/cssgunc/compass.git
synced 2025-04-09 14:00:15 -04:00
Add create user endpoint and update model/entity
This commit is contained in:
parent
dff05af79c
commit
415206ad1a
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user