from typing import Any
from dooray_mcp.services.client import dooray_client
from dooray_mcp.types.member import (
MemberListResult,
ProjectMember,
ProjectMemberListResult,
)
async def search_members(
name: str | None = None,
user_code: str | None = None,
external_email: str | None = None,
page: int = 0,
size: int = 20,
) -> MemberListResult:
path = "/common/v1/members"
params: dict[str, Any] = {"page": page, "size": size}
if name:
params["name"] = name
if user_code:
params["userCode"] = user_code
if external_email:
params["externalEmailAddresses"] = external_email
response = await dooray_client.get(path, params=params)
result = response.get("result", [])
if isinstance(result, list):
total_count = response.get("header", {}).get("totalCount", len(result))
return MemberListResult(totalCount=total_count, contents=result)
return MemberListResult.model_validate(result)
async def list_project_members(
project_id: str, page: int = 0, size: int = 20
) -> ProjectMemberListResult:
path = f"/project/v1/projects/{project_id}/members"
params: dict[str, Any] = {"page": page, "size": size}
response = await dooray_client.get(path, params=params)
result = response.get("result", [])
if isinstance(result, list):
total_count = response.get("header", {}).get("totalCount", len(result))
return ProjectMemberListResult(totalCount=total_count, contents=result)
return ProjectMemberListResult.model_validate(result)
async def get_project_member(project_id: str, member_id: str) -> ProjectMember:
path = f"/project/v1/projects/{project_id}/members/{member_id}"
response = await dooray_client.get(path)
return ProjectMember.model_validate(response.get("result", {}))
async def add_project_member(
project_id: str, member_id: str, role: str = "member"
) -> ProjectMember:
path = f"/project/v1/projects/{project_id}/members"
body: dict[str, Any] = {
"memberId": member_id,
"role": role,
}
response = await dooray_client.post(path, json_data=body)
return ProjectMember.model_validate(response.get("result", {}))