From 4208310a8115ca35b2709d9ab22bce4ec8e04311 Mon Sep 17 00:00:00 2001 From: Sadturtleman Date: Sat, 5 Sep 2026 02:23:14 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(mindrecord):=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=EC=9D=BC=20=EC=84=A0=ED=83=9D=EC=9D=84=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EA=B3=84=EC=95=BD=EB=8C=80=EB=A1=9C=20?= =?UTF-8?q?=EB=90=98=EC=82=B4=EB=A6=B0=EB=8B=A4=20(#1008)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 서버가 2026-08-29 부터 `date` 를 받는다 (`Afternote-BE#244` → PR #262 머지). `DiaryCreateRequest.date`·`DiaryUpdateRequest.date` 가 생겼고 `Diary.entry_date` 컬럼과 인덱스가 서고, 월 조회·주간 리포트가 그 값을 기준으로 돈다. #1121 이 날짜 행을 표시 전용으로 잠근 것은 그 계약이 없던 2026-08-25 실측에 근거한 임시 조치였다. 계약이 왔으므로 시안(2671:17922)대로 되돌린다. - 도메인·DTO·매퍼에 `date` 를 싣는다. 생성은 non-null, 수정은 nullable — 서버가 «생성은 미전송 시 오늘, 수정은 생략 시 유지» 로 가르는 그대로다. - 수정 경로는 **화면 값이 서버에서 왔거나 사용자가 고른 것일 때만** 싣는다. 프리필이 실패한 채 오늘을 실어 보내면 기존 기록일이 조용히 오늘로 옮겨진다 — 수신자 목록을 빈 목록으로 보내면 안 되는 것과 같은 함정이다. - 미래 날짜는 서버가 400(code 2101)으로 거절한다. 고르는 순간 사유와 함께 막는다 — 상태에 넣으면 저장을 눌러 봐야 실패를 안다. - `DiaryWriteDateDisplayTest`(「날짜를 바꾸는 공개 창구가 없다」)를 `DiaryRecordDateWireTest` 로 대체한다. 단언이 정반대가 됐다. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Ea5nJ6nL7c2pdCNzKGztW2 --- docs/qa/assumptions.md | 28 ++- .../feature/mindrecord/data/dto/DiaryDto.kt | 8 + .../mindrecord/data/mapper/DiaryMapper.kt | 3 + .../data/dto/MindRecordDtoContractTest.kt | 34 +++ .../mindrecord/domain/model/DiaryModels.kt | 17 ++ .../domain/testing/FakeDiaryRepository.kt | 5 +- .../screen/sender/DiaryWriteScreen.kt | 39 +++- .../viewmodel/DiaryWriteUiState.kt | 18 +- .../viewmodel/DiaryWriteViewModel.kt | 26 ++- .../src/main/res/values/strings.xml | 2 + .../sender/DiaryWriteScreenScreenshotTest.kt | 2 + .../a11y/WriteToolbarAccessibilityTest.kt | 1 + .../screen/DiaryWriteDateDisplayTest.kt | 35 ---- .../viewmodel/DiaryRecordDateWireTest.kt | 193 ++++++++++++++++++ 14 files changed, 355 insertions(+), 56 deletions(-) delete mode 100644 feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/screen/DiaryWriteDateDisplayTest.kt create mode 100644 feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryRecordDateWireTest.kt diff --git a/docs/qa/assumptions.md b/docs/qa/assumptions.md index 5e549a0484..5355c45a8f 100644 --- a/docs/qa/assumptions.md +++ b/docs/qa/assumptions.md @@ -267,17 +267,29 @@ Compose 테스트로 고정했다. 스키마에 `date` 없음, 보내도 무시됨을 실측). 날짜 선택이 표시 전용인 문제는 BE 계약 확장이나 기획 결정이 필요해 #1008 로 분리했다. -## #1008 — 일기 기록 날짜를 표시 전용으로 (판단 근거) +## #1008 — 일기 기록 날짜 (해소, 추측 없음) -서버가 `date` 를 받지 않는다는 것은 추측이 아니라 실측이다 (2026-08-25). +**서버가 `date` 를 받는다.** 2026-08-25 실측 당시에는 아니었고, 그래서 #1121 이 날짜 행을 +표시 전용으로 잠갔다. 그 뒤 BE 가 (a) 계약 확장을 했다. -- `POST /api/v1/diary` 에 `date: "2026-08-01"` → 저장분 `date: "2026-08-25"` (diaryId 41545) -- `PATCH /api/v1/diary/41545` 에 같은 값 → 저장분 그대로 `2026-08-25` -- Swagger 스키마의 요청 필드: `title · content · isDraft · todayMood · receiverIds` (양쪽 모두 `date` 없음) +| 시점 | 상태 | +|---|---| +| 2026-08-25 (FE 실측) | `POST`·`PATCH` 에 `date: "2026-08-01"` 을 실어도 저장분은 `2026-08-25`. Swagger 요청 스키마에 `date` 없음 | +| 2026-08-29 (`Afternote-BE#244` → PR #262 머지) | `DiaryCreateRequest.date`·`DiaryUpdateRequest.date` 신설. `Diary.entry_date` 컬럼과 `(user_id, entry_date)` 인덱스, 월 조회·주간 리포트가 `entry_date` 기준 | + +계약 규칙도 서버 코드에서 그대로 읽었다. + +- 생성: 미전송이면 오늘(Asia/Seoul) +- 수정: **생략이면 기존 값 유지** +- 공통: 미래 날짜는 `400`(code `2101`), 과거는 제한 없음 + +FE 는 그 계약대로 되돌렸다 — 날짜 행에 피커를 다시 붙이고, 고른 값을 요청에 싣는다. +수정 경로는 «화면 값이 서버에서 왔거나 사용자가 고른 것일 때만» 싣는다. 프리필이 실패한 채 +오늘을 실어 보내면 기존 기록일이 조용히 오늘로 옮겨지기 때문이다 — 수신자 목록을 빈 목록으로 +보내면 안 되는 것과 같은 함정이다. `DiaryRecordDateWireTest` 가 다섯 갈래를 잠근다. -**추측인 부분은 «어느 쪽으로 맞출지» 다.** 이슈가 든 두 선택지 중 (b) 표시 전용을 택했다 — -(a) BE 확장은 우리 손 밖이고, 그때까지 «고를 수 있지만 반영되지 않는» 상태를 두면 사용자가 -고른 날짜로 저장됐다고 믿는다. BE 가 `date` 를 수용하면 피커를 되돌린다. +**남은 것은 없다.** 시안(Figma 2671:17922)의 chevron 도 이제 코드와 같다 — #1121 이 그것을 +뺐던 것이 의도적 이탈이었고, 그 이탈이 해소됐다. ## #613 — 수신자 홈 설정 진입 (판단 보류) - 시안(수신자 섹션 `4327:73626`)의 수신자 홈 헤더에는 **톱니만** 있고 프로필 아이콘이 없다. diff --git a/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/dto/DiaryDto.kt b/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/dto/DiaryDto.kt index c58609710e..ebe936e1ba 100644 --- a/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/dto/DiaryDto.kt +++ b/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/dto/DiaryDto.kt @@ -30,6 +30,12 @@ data class DiaryCreateRequestDto( // 생성 API 에서 `null` 과 빈 목록은 모두 "수신자 없음" 으로 정규화되고, 작성 UI 는 항상 // 목록을 갖고 있다. 빈 목록을 그대로 보내면 되므로 nullable 로 낮추지 않는다 (#789). @SerialName("receiverIds") val receiverIds: List, + /** + * 기록일 `yyyy-MM-dd`. 미전송이면 서버가 오늘(Asia/Seoul)로 채우고, **미래 날짜는 + * 400(code 2101)** 이다 (`Afternote-BE#244`, PR #262). 작성 화면이 항상 값을 갖고 + * 있어 nullable 로 낮추지 않는다 (#1008). + */ + @SerialName("date") val date: String, ) @Serializable @@ -40,6 +46,8 @@ data class DiaryUpdateRequestDto( @SerialName("todayMood") val todayMood: TodayMoodDto, /** null 이면 기존 수신자 유지, 빈 목록이면 전체 해제 (서버 규칙). */ @SerialName("receiverIds") val receiverIds: List? = null, + /** 기록일 `yyyy-MM-dd`. **null 이면 기존 기록일 유지** (서버 규칙). 미래 날짜는 400(code 2101). */ + @SerialName("date") val date: String? = null, ) /** diff --git a/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/mapper/DiaryMapper.kt b/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/mapper/DiaryMapper.kt index a5aaad9aa3..c3d64c6d7e 100644 --- a/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/mapper/DiaryMapper.kt +++ b/feature/mindrecord/data/src/main/kotlin/com/afternote/feature/mindrecord/data/mapper/DiaryMapper.kt @@ -52,6 +52,8 @@ fun DiaryCreatePayload.toRequest(): DiaryCreateRequestDto = isDraft = isDraft, todayMood = todayMood.toDto(), receiverIds = receiverIds, + // LocalDate.toString() 이 ISO-8601 `yyyy-MM-dd` 다 — 서버 계약과 같은 형식이다. + date = date.toString(), ) fun DiaryUpdatePayload.toRequest(): DiaryUpdateRequestDto = @@ -61,4 +63,5 @@ fun DiaryUpdatePayload.toRequest(): DiaryUpdateRequestDto = isDraft = isDraft, todayMood = todayMood.toDto(), receiverIds = receiverIds, + date = date?.toString(), ) diff --git a/feature/mindrecord/data/src/test/java/com/afternote/feature/mindrecord/data/dto/MindRecordDtoContractTest.kt b/feature/mindrecord/data/src/test/java/com/afternote/feature/mindrecord/data/dto/MindRecordDtoContractTest.kt index 0d3bcde9f0..1235549701 100644 --- a/feature/mindrecord/data/src/test/java/com/afternote/feature/mindrecord/data/dto/MindRecordDtoContractTest.kt +++ b/feature/mindrecord/data/src/test/java/com/afternote/feature/mindrecord/data/dto/MindRecordDtoContractTest.kt @@ -122,12 +122,46 @@ class MindRecordDtoContractTest { isDraft = false, todayMood = TodayMoodDto.SOSO, receiverIds = emptyList(), + date = "2026-08-01", ), ) assertEquals(true, encoded.contains("\"receiverIds\":[]")) } + @Test + fun `생성은 기록일을 항상 싣고 수정은 생략할 수 있다`() { + // 서버는 생성에서 미전송이면 오늘로 채우고, 수정에서 생략이면 기존 값을 유지한다 + // (Afternote-BE#244, PR #262). 그 차이가 타입에 그대로 드러나야 한다 (#1008). + val created = + json.encodeToString( + DiaryCreateRequestDto.serializer(), + DiaryCreateRequestDto( + title = "t", + content = "c", + isDraft = false, + todayMood = TodayMoodDto.SOSO, + receiverIds = emptyList(), + date = "2026-08-01", + ), + ) + assertEquals(true, created.contains("\"date\":\"2026-08-01\"")) + + val omitted = + json.encodeToString( + DiaryUpdateRequestDto.serializer(), + DiaryUpdateRequestDto( + title = "t", + content = "c", + isDraft = false, + todayMood = TodayMoodDto.SOSO, + receiverIds = null, + date = null, + ), + ) + assertEquals(false, omitted.contains("\"date\"")) + } + @Test fun `PATCH 는 생략과 명시적 null 이 코드에서 구분된다`() { // 선택 필드라 nullable 은 유지하되 기본값은 없다 — 호출부가 모든 인자를 적어야 한다. diff --git a/feature/mindrecord/domain/src/main/kotlin/com/afternote/feature/mindrecord/domain/model/DiaryModels.kt b/feature/mindrecord/domain/src/main/kotlin/com/afternote/feature/mindrecord/domain/model/DiaryModels.kt index dea157622d..d0b0cf14c9 100644 --- a/feature/mindrecord/domain/src/main/kotlin/com/afternote/feature/mindrecord/domain/model/DiaryModels.kt +++ b/feature/mindrecord/domain/src/main/kotlin/com/afternote/feature/mindrecord/domain/model/DiaryModels.kt @@ -1,5 +1,7 @@ package com.afternote.feature.mindrecord.domain.model +import java.time.LocalDate + enum class TodayMood { HAPPY, SOSO, @@ -38,6 +40,13 @@ data class DiaryCreatePayload( val todayMood: TodayMood, /** 이 일기를 전달받을 수신자 ID 목록. 미선택 시 빈 목록 — 서버가 "수신자 없음" 으로 본다. */ val receiverIds: List, + /** + * 사용자가 고른 기록일. 서버는 미전송 시 오늘(Asia/Seoul)로 채우지만 작성 화면은 항상 + * 값을 갖고 있어 그대로 싣는다 (#1008). + * + * **미래 날짜는 서버가 400(code 2101)으로 거절한다.** 과거는 제한이 없다. + */ + val date: LocalDate, ) data class DiaryUpdatePayload( @@ -53,4 +62,12 @@ data class DiaryUpdatePayload( * 기존 지정을 지워 버린다. */ val receiverIds: List? = null, + /** + * 기록일. **`null` 이면 서버가 기존 값을 유지한다** (`DiaryUpdateRequest.date` — 생략 시 유지). + * + * 화면에 뜬 날짜가 서버에서 온 것이거나 사용자가 직접 고른 것일 때만 싣는다. 프리필이 + * 날짜를 못 가져온 채로 «오늘» 을 실어 보내면 기록일이 조용히 오늘로 옮겨진다 — 수신자 + * 목록을 빈 목록으로 보내면 안 되는 것과 같은 종류의 함정이다 (#1008). + */ + val date: LocalDate? = null, ) diff --git a/feature/mindrecord/domain/src/testFixtures/kotlin/com/afternote/feature/mindrecord/domain/testing/FakeDiaryRepository.kt b/feature/mindrecord/domain/src/testFixtures/kotlin/com/afternote/feature/mindrecord/domain/testing/FakeDiaryRepository.kt index 6814dd9c85..69c4b19024 100644 --- a/feature/mindrecord/domain/src/testFixtures/kotlin/com/afternote/feature/mindrecord/domain/testing/FakeDiaryRepository.kt +++ b/feature/mindrecord/domain/src/testFixtures/kotlin/com/afternote/feature/mindrecord/domain/testing/FakeDiaryRepository.kt @@ -69,12 +69,15 @@ class FakeDiaryRepository( onUpdate?.let { return it(id, payload) } diaries.replaceAll { diary -> if (diary.diaryId == id) { - // date·imageUrl 은 수정 요청 계약에서 빠졌다 (#955) — 기존 값을 유지한다. + // imageUrl 은 수정 요청 계약에 없다 (#955) — 기존 값을 유지한다. + // date 는 2026-08-29 부터 계약에 있고 **생략(null)이면 기존 값 유지**다 + // (Afternote-BE#244, PR #262). 서버와 같은 규칙으로 흉내 낸다 (#1008). diary.copy( title = payload.title, content = payload.content, todayMood = payload.todayMood, isDraft = payload.isDraft, + date = payload.date?.toString() ?: diary.date, ) } else { diary diff --git a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreen.kt b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreen.kt index 603ad6c89c..74a5475691 100644 --- a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreen.kt +++ b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreen.kt @@ -47,6 +47,7 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.afternote.core.ui.R import com.afternote.core.ui.asString +import com.afternote.core.ui.calendar.BottomSheetCalendar import com.afternote.core.ui.theme.AfternoteDesign import com.afternote.core.ui.theme.AfternoteTheme import com.afternote.core.ui.topbar.DetailTopBar @@ -71,6 +72,7 @@ fun DiaryWriteScreen( ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() var showReceiverSheet by remember { mutableStateOf(false) } + var showDateSheet by remember { mutableStateOf(false) } val currentOnSubmitSuccess by rememberUpdatedState(onSubmitSuccess) LaunchedEffect(uiState.submitState) { @@ -91,6 +93,7 @@ fun DiaryWriteScreen( onContentChanged = viewModel::onContentChanged, onMoodSelected = viewModel::onMoodSelected, onReceiverRowClick = { showReceiverSheet = true }, + onDateRowClick = { showDateSheet = true }, onMediaPicked = viewModel::uploadMedia, ) @@ -106,6 +109,20 @@ fun DiaryWriteScreen( onDismiss = { showReceiverSheet = false }, ) } + + if (showDateSheet) { + BottomSheetCalendar( + title = stringResource(MindRecordR.string.mindrecord_write_date_picker_title), + initialDate = uiState.date, + // 미래 날짜는 서버가 400(code 2101)으로 거절한다. 시트는 core:ui 공용이라 + // 달력에서 막지 못하므로 ViewModel 이 받아서 사유와 함께 되돌린다 (#1008). + onDateSelect = { + viewModel.onDateSelected(it) + showDateSheet = false + }, + onDismiss = { showDateSheet = false }, + ) + } } /** @@ -131,6 +148,7 @@ internal fun DiaryWriteScreenContent( onContentChanged: (String) -> Unit, onMoodSelected: (TodayMood) -> Unit, onReceiverRowClick: () -> Unit, + onDateRowClick: () -> Unit, onMediaPicked: suspend (String) -> String? = { null }, ) { Scaffold( @@ -243,15 +261,15 @@ internal fun DiaryWriteScreenContent( } // Figma 2671:17922 — 날짜 선택 행 ("yyyy년 M월 d일" + 아래 화살표) - // **표시 전용이다.** 서버는 생성·수정 어느 쪽에서도 date 를 받지 않고 기록 날짜를 - // 요청 시각으로 정한다 (실측 2026-08-25: POST·PATCH 에 date 를 실어도 저장분은 - // 오늘, Swagger 스키마에도 필드가 없다). 고를 수 있게 두면 사용자는 고른 날짜로 - // 남았다고 믿는데 실제로는 오늘로 저장된다 — 고르지 못하게 해 거짓을 없앤다 (#1008). // - // BE 가 date 를 수용하면 이 자리에 피커를 되돌린다. 이어쓰기 프리필이 채워 주는 - // 원래 날짜를 보여 주는 역할은 그대로다. + // 서버가 2026-08-29 부터 생성·수정 양쪽에서 `date` 를 받는다 (Afternote-BE#244, PR #262). + // 그 전까지는 고른 날짜가 요청에 실리지 않아 «고를 수 있지만 반영되지 않는» 상태였고, + // #1121 이 그 동안 이 행을 표시 전용으로 잠가 뒀다. 계약이 왔으므로 시안대로 되돌린다 (#1008). Row( - modifier = Modifier.fillMaxWidth(), + modifier = + Modifier + .fillMaxWidth() + .clickable(role = Role.Button, onClick = onDateRowClick), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, ) { @@ -260,6 +278,12 @@ internal fun DiaryWriteScreenContent( style = AfternoteDesign.typography.captionLargeR, color = AfternoteDesign.colors.gray9, ) + Icon( + painter = painterResource(R.drawable.core_ui_arrowdown), + contentDescription = null, + tint = AfternoteDesign.colors.gray9, + modifier = Modifier.size(16.dp), + ) } HorizontalDivider() @@ -330,6 +354,7 @@ internal fun DiaryWriteScreenContent( val errorMessage = (uiState.submitState as? SubmitState.Failed)?.message?.asString() + ?: uiState.dateError?.asString() ?: uiState.draftLoadError?.asString() if (errorMessage != null) { Text( diff --git a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteUiState.kt b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteUiState.kt index 3a181136cb..65c8bc0961 100644 --- a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteUiState.kt +++ b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteUiState.kt @@ -12,11 +12,23 @@ data class DiaryWriteUiState( val content: String = "", val mood: TodayMood? = null, /** - * 화면에 표시할 기록 날짜. **표시 전용이다** — 서버는 생성·수정 어느 쪽에서도 이 값을 - * 받지 않고 기록 날짜를 요청 시각으로 정한다 (#1008). 이어쓰기 프리필이 원래 날짜를 - * 채워 주는 자리라 상태 자체는 남긴다. + * 화면에 표시하고 서버로 보낼 기록일. 사용자가 날짜 행에서 고른다 (#1008). + * + * 서버는 2026-08-29 부터 생성·수정 양쪽에서 `date` 를 받는다 (`Afternote-BE#244`, PR #262). + * 미래 날짜는 400(code 2101)이라 [dateError] 로 미리 막는다. */ val date: LocalDate = LocalDate.now(), + /** + * [date] 를 **수정 요청에 실어도 되는지.** 프리필이 서버 날짜를 준 뒤이거나 사용자가 직접 + * 고른 뒤에만 true 다. + * + * 신규 작성은 언제나 싣는다(기본값이 오늘이고 그대로 저장되는 것이 맞다). 문제는 수정 + * 경로다 — 프리필이 실패한 채 «오늘» 을 실어 보내면 기존 기록일이 조용히 오늘로 옮겨진다. + * 그럴 땐 키를 생략해 서버가 기존 값을 유지하게 한다 (#1008). + */ + val isDateChosen: Boolean = false, + /** 고를 수 없는 날짜를 짚었을 때의 안내. 서버가 400 을 주기 전에 화면에서 먼저 막는다 (#1008). */ + val dateError: UiText? = null, /** `GET /users/receivers` 로 불러온 내 수신인 목록. */ val receivers: List = emptyList(), /** diff --git a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteViewModel.kt b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteViewModel.kt index b375c518f8..952f965f39 100644 --- a/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteViewModel.kt +++ b/feature/mindrecord/presentation/src/main/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryWriteViewModel.kt @@ -86,6 +86,22 @@ class DiaryWriteViewModel _uiState.update { it.copy(content = value) } } + /** + * 날짜 행에서 고른 기록일을 싣는다 (#1008). + * + * **미래 날짜는 받지 않는다.** 서버가 400(code 2101)으로 거절하므로, 상태에 넣으면 + * 사용자는 저장을 눌러 봐야 실패를 안다. 고르는 순간 사유와 함께 막는다. + */ + fun onDateSelected(date: LocalDate) { + if (date.isAfter(LocalDate.now())) { + _uiState.update { + it.copy(dateError = UiText.Resource(R.string.mindrecord_error_diary_future_date)) + } + return + } + _uiState.update { it.copy(date = date, isDateChosen = true, dateError = null) } + } + fun onMoodSelected(mood: TodayMood) { _uiState.update { it.copy(mood = mood) } } @@ -186,6 +202,9 @@ class DiaryWriteViewModel // 전체 해제로 읽어, 수신자를 건드리지 않은 편집이 기존 지정을 // 지운다 — 목록 응답에 수신자가 없어 되살릴 수도 없다. receiverIds = state.selectedReceiverIds.toList().takeIf { it.isNotEmpty() }, + // 화면 값이 서버에서 왔거나 사용자가 고른 것일 때만 싣는다. + // 그 밖에는 키를 생략해 서버가 기존 기록일을 유지한다 (#1008). + date = state.date.takeIf { state.isDateChosen }, ), ) } else { @@ -196,6 +215,7 @@ class DiaryWriteViewModel isDraft = isDraft, todayMood = mood, receiverIds = state.selectedReceiverIds.toList(), + date = state.date, ), ) } @@ -288,9 +308,11 @@ class DiaryWriteViewModel title = draft.title, content = draft.content, mood = draft.todayMood, - // 표시 전용 값이다 — 서버가 날짜를 주면 그걸 보여 주고, 안 주면 - // 화면에 이미 떠 있던 값을 유지한다. 고르는 수단은 없다 (#1008). + // 서버가 준 기록일을 그대로 보여 주고, 그때부터 수정 요청에도 싣는다. + // 프리필이 날짜를 못 주면 화면 값(오늘)을 유지하되 `isDateChosen` 은 + // false 로 남겨, 수정이 기존 기록일을 오늘로 밀지 않게 한다 (#1008). date = draft.toUi()?.date ?: it.date, + isDateChosen = draft.toUi()?.date != null || it.isDateChosen, isDraftLoading = false, draftLoaded = true, ) diff --git a/feature/mindrecord/presentation/src/main/res/values/strings.xml b/feature/mindrecord/presentation/src/main/res/values/strings.xml index aa7f2019ea..6b84cc5be2 100644 --- a/feature/mindrecord/presentation/src/main/res/values/strings.xml +++ b/feature/mindrecord/presentation/src/main/res/values/strings.xml @@ -54,6 +54,7 @@ 보통 슬픔 수신자 설정하기 + 기록 날짜 %s님에게 %1$s님 외 %2$d명에게 수신자 선택 @@ -203,6 +204,7 @@ 일기를 불러오지 못했습니다. 일기 등록에 실패했습니다. 임시 저장된 일기를 불러오지 못했습니다. + 기록 날짜는 오늘까지만 고를 수 있습니다. 임시저장한 답변을 불러오지 못했어요. 이대로 저장하면 이전 임시저장이 덮어써집니다. 등록에 실패했습니다. 답변을 입력해 주세요. diff --git a/feature/mindrecord/presentation/src/screenshotTest/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTest.kt b/feature/mindrecord/presentation/src/screenshotTest/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTest.kt index ed96c843fb..fec5ecb775 100644 --- a/feature/mindrecord/presentation/src/screenshotTest/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTest.kt +++ b/feature/mindrecord/presentation/src/screenshotTest/kotlin/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTest.kt @@ -30,6 +30,7 @@ internal fun diaryWriteScreenScreenshot() { onDraftListClick = {}, onMoodSelected = {}, onReceiverRowClick = {}, + onDateRowClick = {}, onSaveDraft = {}, onSubmit = {}, onTitleChanged = {}, @@ -50,6 +51,7 @@ internal fun diaryWriteScreenCompactScreenshot() { onDraftListClick = {}, onMoodSelected = {}, onReceiverRowClick = {}, + onDateRowClick = {}, onSaveDraft = {}, onSubmit = {}, onTitleChanged = {}, diff --git a/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/a11y/WriteToolbarAccessibilityTest.kt b/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/a11y/WriteToolbarAccessibilityTest.kt index e4b674ea58..84ebb0a4af 100644 --- a/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/a11y/WriteToolbarAccessibilityTest.kt +++ b/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/a11y/WriteToolbarAccessibilityTest.kt @@ -337,6 +337,7 @@ class WriteToolbarAccessibilityTest { onContentChanged = {}, onMoodSelected = {}, onReceiverRowClick = {}, + onDateRowClick = {}, ) } } diff --git a/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/screen/DiaryWriteDateDisplayTest.kt b/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/screen/DiaryWriteDateDisplayTest.kt deleted file mode 100644 index 0d1528bf16..0000000000 --- a/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/screen/DiaryWriteDateDisplayTest.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.afternote.feature.mindrecord.presentation.screen - -import com.afternote.feature.mindrecord.presentation.viewmodel.DiaryWriteViewModel -import org.junit.Assert.assertTrue -import org.junit.Test -import java.time.LocalDate - -/** - * 일기 기록 날짜가 «고를 수 있지만 반영되지 않는» 상태가 아닌지 (#1008). - * - * 서버는 생성·수정 어느 쪽에서도 `date` 를 받지 않고 기록 날짜를 요청 시각으로 정한다 - * (실측 2026-08-25: `POST`·`PATCH` 에 `date: "2026-08-01"` 을 실어 보내도 저장분은 - * `2026-08-25`, Swagger 스키마에도 필드가 없다). 그 상태에서 날짜 피커를 열어 두면 - * 사용자는 고른 날짜로 남았다고 믿는다. - * - * 화면에서 피커를 걷어냈으므로 **ViewModel 에 날짜를 바꾸는 창구가 남아 있으면 안 된다** — - * 남겨 두면 다음 사람이 그 함수를 보고 UI 를 되살린다. BE 가 `date` 를 수용하면 그때 함께 - * 되돌린다. - */ -class DiaryWriteDateDisplayTest { - @Test - fun `날짜를 바꾸는 공개 창구가 없다`() { - // "update" 가 "date" 를 부분 문자열로 품는다 — 날짜와 무관한 updateXxx 가 하나만 - // 생겨도 빨개지므로, 이름 규칙이 아니라 **LocalDate 를 받는 공개 함수**로 좁힌다. - val dateSetters = - DiaryWriteViewModel::class.java.methods - .filter { - java.lang.reflect.Modifier - .isPublic(it.modifiers) - }.filter { it.parameterTypes.any { type -> type == LocalDate::class.java } } - .map { it.name } - - assertTrue("날짜 변경 창구가 남아 있다: $dateSetters", dateSetters.isEmpty()) - } -} diff --git a/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryRecordDateWireTest.kt b/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryRecordDateWireTest.kt new file mode 100644 index 0000000000..33fa4466a0 --- /dev/null +++ b/feature/mindrecord/presentation/src/test/kotlin/com/afternote/feature/mindrecord/presentation/viewmodel/DiaryRecordDateWireTest.kt @@ -0,0 +1,193 @@ +package com.afternote.feature.mindrecord.presentation.viewmodel + +import androidx.lifecycle.SavedStateHandle +import com.afternote.core.domain.repository.PhotoUploadRepository +import com.afternote.core.domain.repository.UserReceiverRepository +import com.afternote.feature.mindrecord.domain.model.Diary +import com.afternote.feature.mindrecord.domain.model.TodayMood +import com.afternote.feature.mindrecord.domain.testing.FakeDailyQuestionRepository +import com.afternote.feature.mindrecord.domain.testing.FakeDiaryRepository +import com.afternote.feature.mindrecord.presentation.reporting.RecordingErrorReporter +import com.afternote.feature.mindrecord.presentation.usecase.LoadMindRecordDraftsUseCase +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import java.io.IOException +import java.lang.reflect.Proxy +import java.time.LocalDate + +/** + * 사용자가 고른 기록일이 실제로 요청에 실리는지 (#1008). + * + * 종전에는 날짜 선택이 **표시 전용**이었다 — 서버 스키마에 `date` 가 없어 고른 값이 요청에 + * 실리지 않았고, #1121 이 「고를 수 있지만 반영되지 않는」 상태를 없애려 피커를 걷었다. + * 서버가 2026-08-29 부터 생성·수정 양쪽에서 `date` 를 받으므로(`Afternote-BE#244`, PR #262) + * 피커를 되돌렸고, 이 가드가 그 배선을 잠근다. + * + * 이 파일은 `DiaryWriteDateDisplayTest`(「날짜를 바꾸는 공개 창구가 없다」)를 대체한다 — + * 그 단언은 이제 정반대다. + */ +@OptIn(ExperimentalCoroutinesApi::class) +// 수정 진입 시나리오가 `SavedStateHandle.toRoute()` 로 Bundle 을 탄다 — 순수 JVM 에서는 +// `BaseBundle.putLong` 이 not-mocked 로 죽는다. +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [35]) +class DiaryRecordDateWireTest { + private val dispatcher = StandardTestDispatcher() + + @Before fun setUp() = Dispatchers.setMain(dispatcher) + + @After fun tearDown() = Dispatchers.resetMain() + + @Test + fun `신규 작성은 고른 날짜를 그대로 싣는다`() = + runTest(dispatcher) { + val repository = FakeDiaryRepository() + val viewModel = diaryViewModel(repository, SavedStateHandle(emptyMap())) + advanceUntilIdle() + + val chosen = LocalDate.now().minusDays(3) + viewModel.onDateSelected(chosen) + fillRequiredFields(viewModel) + viewModel.submit() + advanceUntilIdle() + + assertEquals(chosen, repository.createdPayloads.single().date) + } + + @Test + fun `고르지 않으면 오늘이 실린다`() = + runTest(dispatcher) { + val repository = FakeDiaryRepository() + val viewModel = diaryViewModel(repository, SavedStateHandle(emptyMap())) + advanceUntilIdle() + + fillRequiredFields(viewModel) + viewModel.submit() + advanceUntilIdle() + + assertEquals(LocalDate.now(), repository.createdPayloads.single().date) + } + + @Test + fun `미래 날짜는 상태에 들어가지 않는다`() = + runTest(dispatcher) { + // 서버가 400(code 2101)으로 거절하는 값이다. 상태에 넣으면 사용자는 저장을 + // 눌러 봐야 실패를 안다 — 고르는 순간 사유와 함께 막는다. + val repository = FakeDiaryRepository() + val viewModel = diaryViewModel(repository, SavedStateHandle(emptyMap())) + advanceUntilIdle() + + val today = viewModel.uiState.value.date + viewModel.onDateSelected(LocalDate.now().plusDays(1)) + + assertEquals(today, viewModel.uiState.value.date) + assertEquals(false, viewModel.uiState.value.isDateChosen) + assertEquals(true, viewModel.uiState.value.dateError != null) + } + + @Test + fun `프리필이 날짜를 못 주면 수정은 기록일을 싣지 않는다`() = + runTest(dispatcher) { + // 여기서 «오늘» 을 실어 보내면 기존 기록일이 조용히 오늘로 옮겨진다. 서버는 + // 키를 생략하면 기존 값을 유지하므로 생략이 맞다. + val repository = FakeDiaryRepository() + repository.onGetList = { _, _ -> Result.failure(IllegalStateException("offline")) } + val viewModel = diaryViewModel(repository, editRoute()) + advanceUntilIdle() + + fillRequiredFields(viewModel) + viewModel.submit() + advanceUntilIdle() + + assertNull( + repository.updatedPayloads + .single() + .second.date, + ) + } + + @Test + fun `프리필이 준 날짜는 수정 요청에 그대로 남는다`() = + runTest(dispatcher) { + val repository = FakeDiaryRepository(initialDiaries = listOf(existingDiary(date = "2026-07-11"))) + val viewModel = diaryViewModel(repository, editRoute()) + advanceUntilIdle() + + viewModel.submit() + advanceUntilIdle() + + assertEquals( + LocalDate.of(2026, 7, 11), + repository.updatedPayloads + .single() + .second.date, + ) + } + + private fun fillRequiredFields(viewModel: DiaryWriteViewModel) { + viewModel.onTitleChanged("제목") + viewModel.onContentChanged("

본문

") + viewModel.onMoodSelected(TodayMood.HAPPY) + } + + private fun editRoute() = + SavedStateHandle( + mapOf("recordId" to EXISTING_ID, "yearMonth" to "2026-07", "isDraft" to false), + ) + + private fun existingDiary(date: String) = + Diary( + diaryId = EXISTING_ID, + title = "기존 제목", + content = "

기존 본문

", + date = date, + createdAt = "2026-07-11T09:00:00", + todayMood = TodayMood.SOSO, + isDraft = false, + ) + + private fun diaryViewModel( + repository: FakeDiaryRepository, + savedStateHandle: SavedStateHandle, + ): DiaryWriteViewModel = + DiaryWriteViewModel( + savedStateHandle = savedStateHandle, + repository = repository, + // 이 시나리오는 업로드를 타지 않는다 — 부르면 그 자체가 결함이라 실패로 둔다. + photoUploadRepository = PhotoUploadRepository { _, _ -> Result.failure(IOException("unused")) }, + userRepository = emptyReceiverRepository(), + draftLoader = LoadMindRecordDraftsUseCase(repository, FakeDailyQuestionRepository()), + errorReporter = RecordingErrorReporter(), + ) + + /** UserRepository 는 표면이 넓다 — 이 시나리오가 타는 호출만 답한다. */ + private fun emptyReceiverRepository(): UserReceiverRepository = + Proxy.newProxyInstance( + UserReceiverRepository::class.java.classLoader, + arrayOf(UserReceiverRepository::class.java), + ) { _, method, _ -> + when (method.name) { + "getReceivers" -> emptyList() + "getReceiverListFlow" -> flowOf(emptyList()) + else -> error("Unexpected call: ${method.name}") + } + } as UserReceiverRepository + + private companion object { + const val EXISTING_ID = 4242L + } +} From cba91f24ca074c89343f48f0f81f4589af39c51e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 17:29:00 +0000 Subject: [PATCH 2/2] test: update screenshot baselines in CI --- ...riteScreenCompactScreenshot_e7ca7c28_0.png | Bin 41795 -> 41881 bytes .../diaryWriteScreenScreenshot_90705b76_0.png | Bin 64371 -> 64499 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/feature/mindrecord/presentation/src/screenshotTestDebug/reference/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTestKt/diaryWriteScreenCompactScreenshot_e7ca7c28_0.png b/feature/mindrecord/presentation/src/screenshotTestDebug/reference/com/afternote/feature/mindrecord/presentation/screen/sender/DiaryWriteScreenScreenshotTestKt/diaryWriteScreenCompactScreenshot_e7ca7c28_0.png index e9512c5ee755195134cd66e5a6322d8975397d69..bfdbe98ce83458fe9462640f46fc1b76e3e3599a 100644 GIT binary patch delta 9945 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 X7Y+te^c-`+g%FDi)@DWLZ$J7U6Sd)H delta 9858 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 delta 34873 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 AX#fBK