Skip to content

chore: implemented patch HTTP method for member project affiliations (CM-1041)#3912

Open
themarolt wants to merge 5 commits intomainfrom
feat/patch-project-affiliations-CM-1041
Open

chore: implemented patch HTTP method for member project affiliations (CM-1041)#3912
themarolt wants to merge 5 commits intomainfrom
feat/patch-project-affiliations-CM-1041

Conversation

@themarolt
Copy link
Contributor

@themarolt themarolt commented Mar 11, 2026

Note

Medium Risk
Adds a new write API that deletes and reinserts per-project affiliation records and triggers recalculation, so mistakes could impact member affiliation data for a project. Changes are scoped to project-affiliations endpoints and DAL helpers, but touch persistence and audit logging paths.

Overview
Adds a new PATCH /:memberId/project-affiliations/:projectId public API to overwrite a member’s per-project organization affiliations, with request validation, audit-log capture, and a post-write affiliation recalculation trigger.

Extends the data-access layer with project-scoped affiliation CRUD helpers (fetchMemberSegmentAffiliationsForProject, deleteAllMemberSegmentAffiliationsForProject, insertMemberSegmentAffiliations) and updates fetchMemberProjectSegments to optionally filter by a single segment. Refactors affiliation response mapping into shared mappers.ts used by both GET and PATCH handlers.

Written by Cursor Bugbot for commit ff80ae8. This will update automatically on new commits. Configure here.

Signed-off-by: Uroš Marolt <uros@marolt.me>
Copilot AI review requested due to automatic review settings March 11, 2026 14:20
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new public API endpoint to partially update a member’s per-project (segment) affiliation, including DAL helpers for fetching/updating the underlying memberSegmentAffiliations rows and making organization fields nullable.

Changes:

  • Made organizationId / organizationName nullable in ISegmentAffiliationWithOrg.
  • Added DAL helpers to fetch a single member+project affiliation and partially update it.
  • Added PATCH /:memberId/project-affiliations/:projectId public API route + handler.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 7 comments.

File Description
services/libs/data-access-layer/src/members/projectAffiliations.ts Adds single-affiliation fetch + partial update helpers; adjusts affiliation-with-org typing for null orgs.
backend/src/api/public/v1/members/project-affiliations/patchProjectAffiliation.ts New PATCH handler to update project affiliation fields and trigger affiliation recalculation.
backend/src/api/public/v1/members/index.ts Wires the new PATCH route into the public v1 members router.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Uroš Marolt <uros@marolt.me>
Signed-off-by: Uroš Marolt <uros@marolt.me>
@themarolt themarolt requested a review from joanagmaia March 12, 2026 10:20
Signed-off-by: Uroš Marolt <uros@marolt.me>
Signed-off-by: Uroš Marolt <uros@marolt.me>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

const mappedAffiliations =
updatedAffiliations.length > 0
? updatedAffiliations.map(mapSegmentAffiliation)
: workExperiences.map(mapWorkExperienceAffiliation)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unnecessary database query for never-used work experiences

Low Severity

fetchMemberWorkExperienceAffiliations is always called but its result can never be used. The body schema validates affiliations with .min(1), guaranteeing at least one affiliation is inserted. After the transaction commits, fetchMemberSegmentAffiliationsForProject reads them back, so updatedAffiliations.length > 0 is always true. The workExperiences fallback branch on the ternary is dead code, making this an unnecessary database query on every PATCH request.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants