chore: implemented patch HTTP method for member project affiliations (CM-1041)#3912
chore: implemented patch HTTP method for member project affiliations (CM-1041)#3912
Conversation
Signed-off-by: Uroš Marolt <uros@marolt.me>
There was a problem hiding this comment.
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/organizationNamenullable inISegmentAffiliationWithOrg. - Added DAL helpers to fetch a single member+project affiliation and partially update it.
- Added
PATCH /:memberId/project-affiliations/:projectIdpublic 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.
services/libs/data-access-layer/src/members/projectAffiliations.ts
Outdated
Show resolved
Hide resolved
services/libs/data-access-layer/src/members/projectAffiliations.ts
Outdated
Show resolved
Hide resolved
services/libs/data-access-layer/src/members/projectAffiliations.ts
Outdated
Show resolved
Hide resolved
backend/src/api/public/v1/members/project-affiliations/patchProjectAffiliation.ts
Outdated
Show resolved
Hide resolved
backend/src/api/public/v1/members/project-affiliations/patchProjectAffiliation.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: Uroš Marolt <uros@marolt.me>
backend/src/api/public/v1/members/project-affiliations/patchProjectAffiliation.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: Uroš Marolt <uros@marolt.me>
Signed-off-by: Uroš Marolt <uros@marolt.me>
backend/src/api/public/v1/members/project-affiliations/patchProjectAffiliation.ts
Show resolved
Hide resolved
Signed-off-by: Uroš Marolt <uros@marolt.me>
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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.


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/:projectIdpublic 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 updatesfetchMemberProjectSegmentsto optionally filter by a single segment. Refactors affiliation response mapping into sharedmappers.tsused by bothGETandPATCHhandlers.Written by Cursor Bugbot for commit ff80ae8. This will update automatically on new commits. Configure here.