Skip to content

수신자 프로필 사진이 시안에만 있다: 배지를 붙일지 걷을지 확인한다 #2064

Closed as not planned

Description

@OnlyReadOneBook

작업 유형

enhancement — 신규 기능·기존 기능 개선

주 담당 모듈

setting — 설정

개요

수신자 등록·수정 화면의 프로필 사진 자리에 시안은 사진 추가 배지를 두는데, 사진을 담을 자리가 FE 모델에도 서버 응답에도 없다.

  • 시안: 수신인 등록의 프로필 그룹은 아바타(92:8264 인스턴스, 134×136)와 plus_button(52:7886 인스턴스, 48×48) 둘로 이뤄져 있다.
  • 코드: ReceiverDetail(core/model/src/main/kotlin/com/afternote/core/model/user/UserModel.kt:17)에 이미지 필드가 없고, 등록·수정 요청도 이름·관계·연락처·이메일·메시지만 보낸다. 화면은 언제나 기본 아바타만 그린다.

#2003 이 이 자리를 core 자산으로 옮기면서 배지는 그리지 않았다. 선택 경로가 없는 배지를 그리면 눌러도 아무 일이 없고, 그런 상호작용은 접는 것이 docs/convention/composable-callback-defaults.md 의 처분 기준이기 때문이다. 그래서 지금 이 화면은 시안과 달리 배지가 없는 상태다.

완료 조건

  • 수신자에게 사진을 붙이는 것이 현재 범위인지 PM 에 확인한다
  • 범위라면 서버 계약(수신자 이미지 필드와 업로드 경로)을 확인하고 ProfileImagePicker 로 배선한다. 발신자 프로필이 쓰는 ProfilePhotoSourceState 가 그대로 재사용된다
  • 범위가 아니라면 시안에서 배지를 걷도록 요청하고 이 이슈를 닫는다

자식 이슈

참고

RecipientSetScreen 은 #1064 가 화면째 지우므로 이 이슈의 대상이 아니다.

화면 증거

오른쪽이 시안 프로필 그룹 4327:64518 로, 아바타에 사진 추가 배지가 붙어 있다. 가운데가 #2003 적용 후 현행 화면이고 배지가 없다.

수신인 등록 프로필 자리와 시안

Activity

  1. OnlyReadOneBook commented on Sep 13, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    PM 전건호에게 Figma 댓글로 질문했다(2026-09-13). 이 이슈는 그동안 PM 확인 대기로 분류돼 있었지만 실측해 보니 어느 채널에도 발신 기록이 없었다. 이번이 첫 발신이다.

    물은 것은 묵은 본문의 질문을 그대로 옮긴 것이 아니라 origin/develop 86ab223 실코드와 현재 시안으로 다시 벼린 것이다.

    본문에 있었지만 이번 질문에서 뺀 축:

    (1) 본문의 «#2003 이 core 자산으로 옮기면서 배지를 안 그려 지금 화면에 배지가 없다» 는 전제를 뺐다. 86ab223 에 ProfilePhotoWithAddBadge 는 존재하지 않고 배지는 여전히 그려져 있다. #2003 은 OPEN 이고 PR #2067 도 OPEN(base 가 feat/1438-profile-photo 라 develop 에 안 들어왔다). (2) 본문의 «서버 계약(수신자 이미지 필드와 업로드 경로) 확인» 은 뺐다. PM 답이 1번일 때만 생기는 BE 몫이고, 지금 계약에는 필드 자체가 없다. (3) 본문이 시안 근거로 적은 노드 4327-64519 는 아바타 인스턴스 하나일 뿐 배지를 포함하지 않는다. 배지까지 든 그룹은 부모 4327:64518 이라 앵커를 그쪽으로 옮겼다. (4) 카톡 초대 전환(BE#289, 2026-09-08)으로 수신자가 자기 카카오 계정을 갖게 되므로 «발신자가 올린다» 만 묻지 않고 계정 사진 승계를 선택지 2로 넣었다.

  2. OnlyReadOneBook commented on Sep 13, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    답을 기다리는 동안 상태를 굳혀 둔다. 2026-09-13 22:27 KST, FE origin/develop 7d87aa3, BE main 기준이다. 답이 오면 이 이슈를 다시 조사하지 말고 여기서 바로 착수하면 된다.

    기다리는 답

    PM 전건호에게 Figma 댓글 스레드 1923877263으로 물었다(2026-09-13T12:02:20Z 발신, 앞 코멘트). 선택지는 셋이다. (1) 발신자가 수신자 사진을 올린다, (2) 수신자가 수락한 카카오 계정 사진을 승계한다, (3) 사진을 안 쓰고 시안에서 배지를 걷는다.

    발신에서 이 글까지 1시간 25분 지났다. 이번 세션은 Figma MCP 가 미인증이고 REST 도 쓰지 않아 답글 수를 다시 세지 못했다. 앞 코멘트 시점의 실측은 답글 0건이었다. 착수 전에 그 스레드를 먼저 열어 볼 것.

    BE 실코드: 수신자 이미지 필드도 업로드 경로도 없다

    gh api repos/Afternote/Afternote-BE/contents/ 로 main 을 직접 읽었다.

    • src/main/java/com/afternote/domain/receiver/model/Receiver.java 의 컬럼은 id, userId, acceptedUserId, name, relation, phone, email, message, sortOrder 와 afternoteReceivers 연관뿐이다. 이미지 컬럼이 없다.
    • domain/receiver/dto 23개 파일에 수신자 사진용 요청이 없다. ReceiverPresignedUrlRequest 는 이름만 비슷하고, 코드 검색상 domain/receiver/controller/ReceivedRecordController.java 한 곳에서만 쓰인다. 수신자 기록함 첨부 업로드용이다.
    • domain/user/dto/ReceiverDetailResponse.java, ReceiverListResponse.java, UserPatchReceiverRequest.java 어디에도 이미지 필드가 없다.
    • domain/user/controller/UserController.java 의 수신자 엔드포인트는 GET /receivers, GET /receivers/{id}, PATCH /receivers/{id}, PATCH /receivers/{id}/message, PATCH /receivers/{id}/relation, DELETE /receivers/{id} 다. POST /users/receivers 가 없다(BE#289).
    • 수신자가 생기는 경로는 domain/receiver/controller/ReceiverInvitationController.java 의 POST /api/v1/receiver-invitations/{token}/accept 하나다. 그 뒤 Receiver.fromAcceptedInvitation 이 수락한 회원의 name, phone, email 을 그대로 채우고 acceptedUserId 를 남긴다.
    • 반대로 발신자 쪽 사진은 이미 있다. domain/user/model/User.java:40 에 profileImageUrl(length 1000)이 있고, domain/auth/service/social/KakaoLoginService.java:77,85 가 카카오 profile_image_url 을 그대로 넣는다.

    여기서 갈래별 비용이 갈린다. (1)번은 receiver 테이블 컬럼 신설과 presigned URL 경로와 쓰기 엔드포인트가 전부 새로 필요하고, 그 값을 실어 보낼 등록 요청 자체가 BE 에 없다. BE 이슈도 아직 서 있지 않다. (2)번은 Receiver.acceptedUserId 에서 User.profileImageUrl 로 조인해 응답 필드 하나를 늘리면 끝이라 새 컬럼도 업로드 경로도 필요 없다.

    답이 "붙인다"로 올 때 FE 가 손댈 자리

    배지를 실제로 그리는 것은 (1)번일 때뿐이다. (2)번은 발신자가 고를 수 없으니 배지 없이 사진만 표시한다.

    공통으로 건드리는 자리는 feature/setting/presentation/src/main/kotlin/com/afternote/feature/setting/presentation/screen/ReceiverRegisterScreen.kt:184-203 이다. 지금은 Box(134.dp) 안에 ic_default_profile 을 fillMaxSize 로 깔고, BottomEnd 48dp 칸에 ic_plus 를 requiredSize(72.dp) 로 그리는 인라인 블록이고 clickable 이 없다. 이 블록은 등록·수정 공용이다. 같은 파일 94행 ReceiverRegisterContent 를 ReceiverEditContent.kt:31 이 title, actionText 만 바꿔 재사용한다.

    • (1)번이면 core/ui/src/main/kotlin/com/afternote/core/ui/ProfileImage.kt:50 의 ProfileImagePicker(onPickClick = ...) 로 갈아끼운다. 이미 온보딩과 애프터노트와 발신자 등록이 쓰는 컴포넌트라 새로 만들 것은 없다.
    • (2)번이면 같은 파일 26행의 표시 전용 ProfileImage(displayImageUri = ...) 를 쓴다.
    • 모델과 계약: core/model/src/main/kotlin/com/afternote/core/model/user/UserModel.kt:17 의 ReceiverDetail, core/network/src/main/kotlin/com/afternote/core/network/dto/UserDto.kt:11(UserCreateReceiverRequestDto)·:20(UserPatchReceiverRequestDto)·:79(ReceiverDetailDto), core/network/src/main/kotlin/com/afternote/core/network/service/UserApiService.kt:39,51 의 요청 바디. 전부 BE 가 필드를 낸 뒤에 손댄다.
    • 골든 2장 갱신: feature/setting/presentation/src/screenshotTestDebug/reference/com/afternote/feature/setting/presentation/screen/ReceiverEditScreenScreenshotTestKt/ 아래 receiverEditScreenCompactScreenshot_c2abd7e6_0.png, receiverEditScreenScreenshot_748aa731_0.png.

    (1)번에는 발이 하나 더 걸린다. UserApiService.kt:39 가 아직 @POST("users/receivers") 를 부르는데 BE 에는 그 엔드포인트가 없다. 사진을 등록 폼에 붙이는 일은 이 폼이 계속 존재하는지부터 정해져야 한다.

    답이 "걷는다"로 올 때 FE 가 손댈 자리

    FE 코드 변경은 #2003 의 PR #2067 이 이미 들고 있다. 그 PR 이 같은 자리를 표시 전용 ProfileImage() 로 바꾸고, component/ProfilePhotoWithAddBadge.kt(84줄)와 res/drawable/ic_plus.xml 을 지우고, 위 골든 2장을 갱신한다. 다만 base 가 feat/1438-profile-photo 라 #2044 → #2067 순으로 들어온다. 둘 다 OPEN 이다.

    그래서 (3)번으로 답이 오면 이 이슈에 남는 일은 디자이너에게 시안의 plus_button 을 걷어 달라고 요청하고 닫는 것뿐이다. (2)번으로 와도 배지가 걷히는 것은 같고 사진 표시만 더 붙는다.

    본문이 지금 실태와 어긋나는 항목

    미착수 확인

    브랜치 0건(git ls-remote --heads origin | grep 2064), 커밋 0건(git log origin/develop --grep=2064), 워크트리 0건, PR 0건이다. gh pr list --search 2064 에 #2067 이 걸리는 것은 그 PR 본문이 "수신인 등록의 배지는 #2064 로 분리했습니다" 라고 이 이슈를 가리키기 때문이고, PR 자체는 #2003 의 것이다. blocked_by 와 blocking 모두 빈 배열인데, PM 답 대기는 GitHub 의존으로 표현할 수 없는 종류라 이건 정상이다.

  3. OnlyReadOneBook commented on Sep 18, 2026

    @OnlyReadOneBook
    CollaboratorAuthor

    PM 결정 대기 항목은 깃허브 이슈로 두지 않고 피그마 질문 한 자리에만 둔다(2026-09-18 결정). 이 이슈의 질문은 피그마 스레드에 걸려 있다: https://www.figma.com/design/UP9ZR186jHvRBicjA2SOea/?node-id=4327-64518#1923877263 답이 오면 그 답을 근거로 구현 이슈를 새로 만든다.

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

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions