From d3d5faf24195ab45f2cefa2cf9278f477dd7bb7b Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Wed, 7 Jan 2026 06:15:19 -0800 Subject: [PATCH] fix: resolve duplicate members and missing leader actions on chapter pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed two issues reported by David Porzelt on the German chapter page: 1. Duplicate members in chapter lists - Users belonging to multiple organizations appeared multiple times due to a SQL JOIN that returned multiple rows per user. Fixed by using LEFT JOIN LATERAL with LIMIT 1 to ensure only one organization membership row per user. 2. Leader actions not working - The /api/config endpoint was not returning the user's ID, causing the frontend leader check to always fail since currentUser.id was undefined. Added id field to the response. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .changeset/giant-tires-argue.md | 2 ++ server/src/db/working-group-db.ts | 24 +++++++++++++++++++++--- server/src/http.ts | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 .changeset/giant-tires-argue.md diff --git a/.changeset/giant-tires-argue.md b/.changeset/giant-tires-argue.md new file mode 100644 index 0000000000..a845151cc8 --- /dev/null +++ b/.changeset/giant-tires-argue.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/server/src/db/working-group-db.ts b/server/src/db/working-group-db.ts index 989ae3793e..532a23a737 100644 --- a/server/src/db/working-group-db.ts +++ b/server/src/db/working-group-db.ts @@ -514,7 +514,13 @@ export class WorkingGroupDatabase { FROM working_group_memberships wgm LEFT JOIN users u ON wgm.workos_user_id = u.workos_user_id LEFT JOIN organizations user_org ON u.primary_organization_id = user_org.workos_organization_id - LEFT JOIN organization_memberships om ON wgm.workos_user_id = om.workos_user_id + LEFT JOIN LATERAL ( + SELECT om.first_name, om.last_name, om.email, om.workos_organization_id + FROM organization_memberships om + WHERE om.workos_user_id = wgm.workos_user_id + ORDER BY om.created_at DESC + LIMIT 1 + ) om ON true LEFT JOIN organizations org ON om.workos_organization_id = org.workos_organization_id WHERE wgm.working_group_id = $1 AND wgm.status = 'active' ORDER BY user_name, user_email`, @@ -583,7 +589,13 @@ export class WorkingGroupDatabase { LEFT JOIN working_group_memberships wgm ON wgl.user_id = wgm.workos_user_id AND wgm.working_group_id = wgl.working_group_id LEFT JOIN users u ON wgl.user_id = u.workos_user_id LEFT JOIN organizations user_org ON u.primary_organization_id = user_org.workos_organization_id - LEFT JOIN organization_memberships om ON wgl.user_id = om.workos_user_id + LEFT JOIN LATERAL ( + SELECT om.first_name, om.last_name, om.email, om.workos_organization_id + FROM organization_memberships om + WHERE om.workos_user_id = wgl.user_id + ORDER BY om.created_at DESC + LIMIT 1 + ) om ON true LEFT JOIN organizations org ON om.workos_organization_id = org.workos_organization_id LEFT JOIN slack_user_mappings sm ON wgl.user_id = sm.slack_user_id WHERE wgl.working_group_id = $1 @@ -622,7 +634,13 @@ export class WorkingGroupDatabase { LEFT JOIN working_group_memberships wgm ON wgl.user_id = wgm.workos_user_id AND wgm.working_group_id = wgl.working_group_id LEFT JOIN users u ON wgl.user_id = u.workos_user_id LEFT JOIN organizations user_org ON u.primary_organization_id = user_org.workos_organization_id - LEFT JOIN organization_memberships om ON wgl.user_id = om.workos_user_id + LEFT JOIN LATERAL ( + SELECT om.first_name, om.last_name, om.email, om.workos_organization_id + FROM organization_memberships om + WHERE om.workos_user_id = wgl.user_id + ORDER BY om.created_at DESC + LIMIT 1 + ) om ON true LEFT JOIN organizations org ON om.workos_organization_id = org.workos_organization_id LEFT JOIN slack_user_mappings sm ON wgl.user_id = sm.slack_user_id WHERE wgl.working_group_id = ANY($1) diff --git a/server/src/http.ts b/server/src/http.ts index ef9a56392d..ec84dd3365 100644 --- a/server/src/http.ts +++ b/server/src/http.ts @@ -1304,6 +1304,7 @@ export class HTTPServer { } const user = req.user ? { + id: req.user.id, email: req.user.email, firstName: req.user.firstName, lastName: req.user.lastName,