You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(setting): 프로필 사진 변경이 통째로 미구현 — 플러스 배지 무동작·서버 이미지 미표시·profileImageUrl null 하드코딩 #1438
clickable·onClick 이 없다. 배지는 Image 두 개를 겹친 Box 일 뿐이다.
선택된 이미지 URI 를 담을 상태가 ProfileEditUiState.Success 에 없다(name·phone·email·isUpdating 뿐).
아바타는 항상 로컬 기본 이미지를 그린다. 서버가 내려준 user.profileImageUrl 을 표시하지도 않는다.
ProfileEditViewModel.updateProfile:55 이 profileImageUrl = null 하드코딩이라, 설령 값이 생겨도 전송 경로가 없다.
즉 조회·선택·전송 세 축이 전부 비어 있고, 화면에는 "누르면 될 것 같은" 배지만 있다.
참고할 선례가 이미 있다
온보딩에 갤러리 피커 경로가 구현돼 있다(#1113·#1115 에서 취소 처리까지 고쳐진 흐름). 업로드는 presigned URL 방식이고 contentLength 필수 함정은 #950 에서 해소됐다. 서버 계약도 열려 있다. PATCH /users/me 의 profileImageUrl 은 S3 키를 받아 s3Service.promoteMediaKey("profiles", userId, key) 로 승격한다(Afternote-BE UserService.updateMyProfile).
작업 범위
배지 탭 → 갤러리 이미지 선택 결선. 현재 설정 시안과 온보딩의 ImageOnly 경로를 기준으로 하며, 확인되지 않은 촬영 동작은 구현 범위에서 제외한다.
선택 이미지 업로드 → 반환 키를 updateMyProfile(profileImageUrl = key) 로 전달.
이 화면의 아바타+배지가 core ProfileImagePicker 로 대체 가능한지는 refactor(core): 동일 화살표 렌더링을 기존 ArrowIcon에 위임한다 #635 검증에서 기각됐다. "setting 쪽은 클릭 핸들러·URI·상태가 아예 없는 정적 장식이라, 필요한 건 core 대체가 아니라 프로필 사진 변경 기능 구현" 이 그 판정이었다. 이 이슈가 그 "기능 구현" 몫이다.
시안 정본은 팀 Figma 파일(정리 Screen Design)의 설정 프로필 수정 화면. 배지 위치·크기는 현재 구현이 이미 시안을 따르고 있으므로 동작만 얹으면 된다.
실기동 화면
에뮬레이터 Pixel 7(API 34) 실기동, QA823 계정, 실서버 afternote.kro.kr. 프로필 설정에서 플러스 배지를 눌렀을 때다. 현행은 탭 전후 프레임이 픽셀 단위로 같아 아무 일도 일어나지 않고, 구현분은 미디어 선택 시트가 열린다. 이메일 칸은 가렸다.
구조 선행
#2179 / PR #2180의 ProfileEdit MVI·UiState 신호 계약을 소비한다. 사진 선택·업로드는 그 위의 Intent와 reducer event로 추가하며, 기존 StateFlow·Channel 배선을 별도로 확장하지 않는다. 현재 PR #2152의 실제 base는 #2147이고 Nav3 entry에서 화면과 ViewModel 수명이 관리된다. 위 실기동 첨부의 선택 시트는 과거 닫힌 구현이며 현재 갤러리 경로의 검증 증거로 사용하지 않는다.
이 관계는 닫힌 설정 사슬 스택(#1930 계열)에서 PR 순서를 표현하려고 걸었던 것이고, 기능상 선행이 아닙니다. 현재 설정 화면은 Nav2 라 SettingNavGraph 의 composable<SettingRoute.ProfileEditRoute> 가 진입할 때마다 ViewModel 을 새로 만들고 init 에서 프로필을 다시 조회합니다. 그래서 "재진입 시 그 사진이 보인다"는 완료 조건은 #1920 없이 충족됩니다.
구현은 #2152 입니다(스택 #2123 → #2124 → #2128 → #2147 → #2152). #1920 이 나중에 재진입 갱신을 넣을 때는 이 화면의 저장 전 선택(selectedImageUri)을 조회 응답으로 지우지 않아야 합니다. #1920 완료 조건의 "저장하지 않은 입력·선택이 사라지지 않는다"와 같은 내용입니다.
Activity
github-actions commentedon Aug 29, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
등록 후 24시간이 지나도 비어 있으면 자동으로 닫습니다. 닫힌 뒤에는 값을 지정하고 다시 열어 주세요.
github-actions commentedon Sep 13, 2026
이 이슈를 맡은 PR 은 #2044 다 (base
handoff/1920-setting-1hyok).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.test(setting): 프로필 촬영 FileProvider 설치 계약 검증 (#1438)
5 remaining items
OnlyReadOneBook commentedon Sep 23, 2026
blocked_by #1920 을 풀었습니다.
이 관계는 닫힌 설정 사슬 스택(#1930 계열)에서 PR 순서를 표현하려고 걸었던 것이고, 기능상 선행이 아닙니다. 현재 설정 화면은 Nav2 라
SettingNavGraph의composable<SettingRoute.ProfileEditRoute>가 진입할 때마다 ViewModel 을 새로 만들고init에서 프로필을 다시 조회합니다. 그래서 "재진입 시 그 사진이 보인다"는 완료 조건은 #1920 없이 충족됩니다.구현은 #2152 입니다(스택 #2123 → #2124 → #2128 → #2147 → #2152). #1920 이 나중에 재진입 갱신을 넣을 때는 이 화면의 저장 전 선택(
selectedImageUri)을 조회 응답으로 지우지 않아야 합니다. #1920 완료 조건의 "저장하지 않은 입력·선택이 사라지지 않는다"와 같은 내용입니다.github-actions commentedon Sep 27, 2026
이 이슈는 필수 메타데이터를 판정할 수 없어 자동으로 닫았습니다.
작업 유형이 없거나 허용된 값이 아닙니다.주 담당 모듈이 없거나 허용된 값이 아닙니다.이슈 등록 양식에 맞게 본문을 보완한 뒤 다시 열어 주세요.
fix(setting): 프로필 사진을 MVI Intent와 reducer로 연결 (#1438)
test(setting): cover profile save back and picker restoration (#1438)
Merge setting event MVI prerequisite for profile follow-ups (#1438)
chore(setting): propagate current setting parent (#1438)
test(setting): propagate save error viewport check (#1438)