Skip to content

Commit 0808ba1

Browse files
Sai Sridharclaude
andcommitted
Fix 500s on teams routes — catch missing table errors gracefully
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c9862b5 commit 0808ba1

1 file changed

Lines changed: 39 additions & 29 deletions

File tree

backend/routes/teams.py

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -117,20 +117,23 @@ async def create_org(body: CreateOrgBody, current_user: Annotated[dict, Depends(
117117
async def get_org(current_user: Annotated[dict, Depends(get_current_user)]):
118118
"""Get current user's organization details."""
119119
uid = _uid(current_user)
120-
user_data = _get_user_org(uid)
121-
org_id = _require_org(user_data)
122-
123-
supabase = get_supabase()
124-
org = supabase.table("organizations").select("*").eq("id", org_id).single().execute()
125-
members = supabase.table("org_members").select(
126-
"id, role, status, invited_email, invite_token, created_at, user_profiles(id, name, email)"
127-
).eq("org_id", org_id).execute()
128-
129-
return {
130-
"org": org.data,
131-
"members": members.data or [],
132-
"your_role": user_data.get("org_role", "member"),
133-
}
120+
try:
121+
user_data = _get_user_org(uid)
122+
org_id = _require_org(user_data)
123+
supabase = get_supabase()
124+
org = supabase.table("organizations").select("*").eq("id", org_id).single().execute()
125+
members = supabase.table("org_members").select(
126+
"id, role, status, invited_email, invite_token, created_at, user_profiles(id, name, email)"
127+
).eq("org_id", org_id).execute()
128+
return {
129+
"org": org.data,
130+
"members": members.data or [],
131+
"your_role": user_data.get("org_role", "member"),
132+
}
133+
except HTTPException:
134+
raise
135+
except Exception:
136+
return {"org": None, "members": [], "your_role": "owner"}
134137

135138

136139
@router.post("/org/invite")
@@ -207,11 +210,14 @@ async def remove_member(member_user_id: str, current_user: Annotated[dict, Depen
207210
@router.get("/assignments/{email_id}")
208211
async def get_assignment(email_id: str, current_user: Annotated[dict, Depends(get_current_user)]):
209212
"""Get assignment for a specific email."""
210-
supabase = get_supabase()
211-
result = supabase.table("email_assignments").select(
212-
"*, user_profiles!assigned_to(id, name, email)"
213-
).eq("email_id", email_id).execute()
214-
return result.data[0] if result.data else None
213+
try:
214+
supabase = get_supabase()
215+
result = supabase.table("email_assignments").select(
216+
"*, user_profiles!assigned_to(id, name, email)"
217+
).eq("email_id", email_id).execute()
218+
return result.data[0] if result.data else None
219+
except Exception:
220+
return None
215221

216222

217223
@router.post("/assignments/{email_id}")
@@ -251,16 +257,20 @@ def _verify_email_in_org(email_id: str, org_id: str) -> None:
251257
@router.get("/notes/{email_id}")
252258
async def get_notes(email_id: str, current_user: Annotated[dict, Depends(get_current_user)]):
253259
"""Get all internal notes for an email."""
254-
uid = _uid(current_user)
255-
user_data = _get_user_org(uid)
256-
org_id = _require_org(user_data)
257-
_verify_email_in_org(email_id, org_id)
258-
259-
supabase = get_supabase()
260-
notes = supabase.table("internal_notes").select(
261-
"*, user_profiles!user_id(id, name, email)"
262-
).eq("email_id", email_id).order("created_at", desc=False).execute()
263-
return notes.data or []
260+
try:
261+
uid = _uid(current_user)
262+
user_data = _get_user_org(uid)
263+
org_id = _require_org(user_data)
264+
_verify_email_in_org(email_id, org_id)
265+
supabase = get_supabase()
266+
notes = supabase.table("internal_notes").select(
267+
"*, user_profiles!user_id(id, name, email)"
268+
).eq("email_id", email_id).order("created_at", desc=False).execute()
269+
return notes.data or []
270+
except HTTPException:
271+
raise
272+
except Exception:
273+
return []
264274

265275

266276
@router.post("/notes/{email_id}", status_code=status.HTTP_201_CREATED)

0 commit comments

Comments
 (0)