mirror of
https://github.com/cssgunc/compass.git
synced 2025-04-20 10:30:16 -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: 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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user