diff --git a/backend/app/services/psa/connectwise/provider.py b/backend/app/services/psa/connectwise/provider.py index cce2bacf..3159e9ba 100644 --- a/backend/app/services/psa/connectwise/provider.py +++ b/backend/app/services/psa/connectwise/provider.py @@ -231,7 +231,33 @@ class ConnectWiseProvider(PSAProvider): return self._map_ticket(data) async def list_members(self) -> list[PSAMember]: - raise NotImplementedError("Implemented in Slice 5") + """List CW system members (cached 15 minutes).""" + cache_key = "members:all" + cached = psa_cache.get(cache_key) + if cached is not None: + return cached + + data = await self.client.get_paginated( + "/system/members", + params={ + "fields": "id,identifier,firstName,lastName,officeEmail", + "conditions": "inactiveFlag = false", + "pageSize": 1000, + }, + ) + + result = [ + PSAMember( + id=str(m["id"]), + identifier=m.get("identifier", ""), + name=f"{m.get('firstName', '')} {m.get('lastName', '')}".strip(), + email=m.get("officeEmail"), + ) + for m in data + ] + + psa_cache.set(cache_key, result, ttl_seconds=900) + return result # ── Private helpers ───────────────────────────────────────────────