feat: 프로필 이미지(avatarUrl) 필드 + UserAvatar 도입, 색상·이니셜 아바타 제거

- 백엔드: User.avatarUrl(nullable) 추가 → PublicUser/toPublic 로 모든 유저 응답에 노출.
- 프론트: 공용 UserAvatar(이미지 있으면 img, 없으면 사람 실루엣 placeholder)로
  전 화면 아바타 통일(상단바·저장소·멤버·담당자·활동·내업무·댓글·AI패널).
  화면마다 달랐던 색상+이니셜/하드코딩 청록 아바타 제거.
- 죽은 코드 정리: 색상·이니셜 시스템(avatarColor/initialOf/AvatarColor 유틸·타입,
  User/RepoActivityItem 의 initial/color, 전역·컴포넌트 .av-a~.av-f CSS) +
  미사용 정적 목업 데이터(USERS/REPOS/REPO_TASKS/TASK_DETAIL/MY_TASKS_*/REPO_MEMBERS/
  REPO_ACTIVITY 등) 전부 삭제. relay.mock.ts 는 뷰 타입 + countActive 만 유지.

avatar_url 컬럼은 dev synchronize 가 추가. 업로드(실제 사진 설정)는 추후 단계.
검증: 백엔드 build 0, 프론트 type-check/lint/build 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-19 14:04:09 +09:00
parent fa4bc40761
commit 5351373694
23 changed files with 171 additions and 882 deletions
@@ -29,6 +29,10 @@ export class User {
@Column({ type: 'varchar', nullable: true })
role!: string | null;
// 프로필 이미지 URL — 미설정 시 null(프론트는 placeholder 표시). 업로드는 추후 단계.
@Column({ name: 'avatar_url', type: 'varchar', nullable: true })
avatarUrl!: string | null;
@CreateDateColumn({ name: 'created_at' })
createdAt!: Date;
+2
View File
@@ -9,6 +9,7 @@ export interface PublicUser {
email: string;
name: string;
role: string | null;
avatarUrl: string | null;
}
// 사용자 데이터 접근 계층 — 인증 모듈이 주입하여 사용
@@ -76,6 +77,7 @@ export class UserService {
email: user.email,
name: user.name,
role: user.role,
avatarUrl: user.avatarUrl ?? null,
};
}
}