[OND211-2329]: Added API to list users in a department.
This commit is contained in:
parent
a0204b0bc5
commit
7a8bba853b
1 changed files with 93 additions and 0 deletions
|
|
@ -698,3 +698,96 @@ def remove_member(department_id: str, user_id: str) -> Response:
|
|||
logging.exception(e)
|
||||
return server_error_response(e)
|
||||
|
||||
|
||||
@manager.route("/<department_id>/members", methods=["GET"]) # noqa: F821
|
||||
@login_required
|
||||
def list_members(department_id: str) -> Response:
|
||||
"""List all users in a department.
|
||||
|
||||
Any team member can list users from any department in their team.
|
||||
|
||||
---
|
||||
tags:
|
||||
- Department
|
||||
security:
|
||||
- ApiKeyAuth: []
|
||||
parameters:
|
||||
- in: path
|
||||
name: department_id
|
||||
required: true
|
||||
type: string
|
||||
description: Department ID
|
||||
responses:
|
||||
200:
|
||||
description: Department members retrieved successfully.
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
description: User-department relationship ID.
|
||||
user_id:
|
||||
type: string
|
||||
description: User ID.
|
||||
status:
|
||||
type: string
|
||||
description: Relationship status.
|
||||
nickname:
|
||||
type: string
|
||||
description: User nickname.
|
||||
email:
|
||||
type: string
|
||||
description: User email.
|
||||
avatar:
|
||||
type: string
|
||||
description: User avatar.
|
||||
is_active:
|
||||
type: boolean
|
||||
description: Whether user is active.
|
||||
message:
|
||||
type: string
|
||||
description: Success message.
|
||||
401:
|
||||
description: Unauthorized.
|
||||
403:
|
||||
description: Forbidden - not a team member.
|
||||
404:
|
||||
description: Department not found.
|
||||
"""
|
||||
# Get department and verify it exists
|
||||
success, department = DepartmentService.get_by_id(department_id)
|
||||
|
||||
if not success or not department:
|
||||
return get_data_error_result(message="Department not found.")
|
||||
|
||||
# Check if user is a member of the team (any team member can view department members)
|
||||
if not is_team_member(department.tenant_id, current_user.id):
|
||||
return get_json_result(
|
||||
data=False,
|
||||
message="You must be a member of the team to view department members.",
|
||||
code=RetCode.PERMISSION_ERROR,
|
||||
)
|
||||
|
||||
try:
|
||||
# Get all users in the department
|
||||
members: List[Dict[str, Any]] = UserDepartmentService.get_by_department_id(department_id)
|
||||
|
||||
# Filter only valid members (status == VALID)
|
||||
valid_members: List[Dict[str, Any]] = [
|
||||
member for member in members
|
||||
if member.get("status") == StatusEnum.VALID.value
|
||||
]
|
||||
|
||||
return get_json_result(
|
||||
data=valid_members,
|
||||
message=f"Retrieved {len(valid_members)} member(s) from department.",
|
||||
)
|
||||
except Exception as e:
|
||||
logging.exception(e)
|
||||
return server_error_response(e)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue