fix: 멤버 초대/역할변경/제거 알림에 actorName 누락 → '누군가' 표기 수정

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) <noreply@anthropic.com>
This commit is contained in:
2026-06-21 10:31:03 +09:00
parent 32a87d8f62
commit 73eb53625c
@@ -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<string> {
const user = await this.userService.findById(userId);
return user?.name ?? '';
}
private async getMemberOrThrow(
projectId: string,
userId: string,