From 73eb53625c68aa294aada7864b3f88ad511dfe34 Mon Sep 17 00:00:00 2001 From: ttipo Date: Sun, 21 Jun 2026 10:31:03 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=A9=A4=EB=B2=84=20=EC=B4=88=EB=8C=80/?= =?UTF-8?q?=EC=97=AD=ED=95=A0=EB=B3=80=EA=B2=BD/=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=EC=97=90=20actorName=20=EB=88=84=EB=9D=BD=20?= =?UTF-8?q?=E2=86=92=20'=EB=88=84=EA=B5=B0=EA=B0=80'=20=ED=91=9C=EA=B8=B0?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ProjectMemberService 의 notify payload 에 actorName 이 빠져 있어, 프론트 notification.store 가 actorName 부재 시 '누군가'로 폴백하던 문제. 세 member.* 알림(invited/role_changed/removed) payload 에 actorName 추가 (actingUserId 로 사용자명 조회하는 actorName 헬퍼 신설). 활동 피드는 actor 관계로 별도 해결되므로 영향 없음. 런타임 검증: 초대 시 수신자 알림 payload.actorName = 초대자 이름으로 채워짐. 백엔드 build/lint 0·8 tests. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../modules/project/project-member.service.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/backend/src/modules/project/project-member.service.ts b/backend/src/modules/project/project-member.service.ts index be780e6..26901f2 100644 --- a/backend/src/modules/project/project-member.service.ts +++ b/backend/src/modules/project/project-member.service.ts @@ -120,7 +120,11 @@ export class ProjectMemberService { recipientIds: [user.id], actorId: actingUserId, type: 'member.invited', - payload: { projectId: project.id, projectName: project.name }, + payload: { + projectId: project.id, + projectName: project.name, + actorName: await this.actorName(actingUserId), + }, }); return this.toResponse(saved); } @@ -160,6 +164,7 @@ export class ProjectMemberService { projectId: project.id, projectName: project.name, roleType: member.roleType, + actorName: await this.actorName(actingUserId), }, }); return this.toResponse(member); @@ -194,7 +199,11 @@ export class ProjectMemberService { recipientIds: [targetUserId], actorId: actingUserId, type: 'member.removed', - payload: { projectId: project.id, projectName: project.name }, + payload: { + projectId: project.id, + projectName: project.name, + actorName: await this.actorName(actingUserId), + }, }); } @@ -227,6 +236,12 @@ export class ProjectMemberService { return project; } + // 행위자 표시 이름 — 알림 payload 의 actorName 용. 없으면 '' (프론트가 '누군가'로 폴백) + private async actorName(userId: string): Promise { + const user = await this.userService.findById(userId); + return user?.name ?? ''; + } + private async getMemberOrThrow( projectId: string, userId: string,