diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteCategoryCodec.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteCategoryCodec.kt index f03bda126e..d1ebc2afd0 100644 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteCategoryCodec.kt +++ b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteCategoryCodec.kt @@ -32,3 +32,6 @@ fun afternoteTypeFromServerCategory(value: String): AfternoteType? { if (normalized == LEGACY_MEMORIAL_CATEGORY) return AfternoteType.MEMORIAL return serverCategoryByType.entries.firstOrNull { it.value == normalized }?.key } + +/** 서버 `category` → [AfternoteType]. 대응이 없으면 [AfternoteType.SOCIAL_NETWORK] 로 폴백한다. */ +fun categoryToAfternoteType(category: String): AfternoteType = afternoteTypeFromServerCategory(category) ?: AfternoteType.SOCIAL_NETWORK diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapper.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapper.kt similarity index 92% rename from feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapper.kt rename to feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapper.kt index 4f766b5e96..f975a71392 100644 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapper.kt +++ b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapper.kt @@ -1,12 +1,9 @@ -package com.afternote.feature.afternote.data.mapper.response +package com.afternote.feature.afternote.data.mapper import com.afternote.feature.afternote.data.dto.AfternoteDetailDto import com.afternote.feature.afternote.data.dto.AfternoteDetailReceiverDto import com.afternote.feature.afternote.data.dto.AfternotePlaylistDto import com.afternote.feature.afternote.data.dto.AfternoteSongDto -import com.afternote.feature.afternote.data.mapper.afternoteTypeFromServerCategory -import com.afternote.feature.afternote.data.mapper.formatDateFromServer -import com.afternote.feature.afternote.data.mapper.toLeaveMessageBlocks import com.afternote.feature.afternote.domain.AfternoteType import com.afternote.feature.afternote.domain.model.author.Detail import com.afternote.feature.afternote.domain.model.author.DetailContent @@ -25,7 +22,7 @@ import kotlin.collections.mapNotNull * 임의의 종류로 메우면 라벨·아이콘·처리 방법이 다른 종류의 것으로 표시된다(#1048). * 던진 예외는 `AfternoteRepositoryImpl.safeCall` 이 잡아 `Result.failure` 로 옮긴다. */ -fun AfternoteDetailDto.toDetailDomain(): Detail { +fun AfternoteDetailDto.toDomain(): Detail { val resolvedType = requireNotNull(afternoteTypeFromServerCategory(category)) { "해석할 수 없는 애프터노트 종류다: afternoteId=$afternoteId category=$category" diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteListItemDtoToDomain.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteListItemMapper.kt similarity index 100% rename from feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteListItemDtoToDomain.kt rename to feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteListItemMapper.kt diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToRequest.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteRequestMapper.kt similarity index 64% rename from feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToRequest.kt rename to feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteRequestMapper.kt index 694dbe9607..0cf3dd5cd6 100644 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToRequest.kt +++ b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/AfternoteRequestMapper.kt @@ -3,13 +3,26 @@ package com.afternote.feature.afternote.data.mapper import com.afternote.feature.afternote.data.dto.AfternoteCreateAccountRequestDto import com.afternote.feature.afternote.data.dto.AfternoteCreateGalleryRequestDto import com.afternote.feature.afternote.data.dto.AfternoteCreatePlaylistRequestDto +import com.afternote.feature.afternote.data.dto.AfternoteCredentialsDto +import com.afternote.feature.afternote.data.dto.AfternoteMemorialVideoDto +import com.afternote.feature.afternote.data.dto.AfternotePlaylistDto import com.afternote.feature.afternote.data.dto.AfternoteReceiverRefDto +import com.afternote.feature.afternote.data.dto.AfternoteSongDto import com.afternote.feature.afternote.data.dto.AfternoteUpdateRequestDto import com.afternote.feature.afternote.domain.AfternoteType +import com.afternote.feature.afternote.domain.model.author.AfternoteAccountCredentials import com.afternote.feature.afternote.domain.model.author.AfternoteUpdatePayload import com.afternote.feature.afternote.domain.model.author.CreateAccountPayload import com.afternote.feature.afternote.domain.model.author.CreateGalleryPayload import com.afternote.feature.afternote.domain.model.author.CreateMemorialPayload +import com.afternote.feature.afternote.domain.model.author.MemorialSongPayload +import com.afternote.feature.afternote.domain.model.author.MemorialVideoPayload +import com.afternote.feature.afternote.domain.model.author.MemorialWritePayload +import com.afternote.feature.afternote.domain.model.author.ReceiverRefPayload + +/** + * 도메인 → 요청 wire. 요청 바디 루트는 `toRequest`, 그 안에 실리는 부분 DTO 는 `toDto` 다. + */ fun AfternoteUpdatePayload.toRequest() = AfternoteUpdateRequestDto( @@ -18,7 +31,7 @@ fun AfternoteUpdatePayload.toRequest() = processingMethods = processingMethods, leaveMessage = leaveMessageBlocks.toDto(), credentials = credentials?.toDto(), - receivers = receivers?.toDto(), + receivers = receivers?.map { it.toDto() }, memorial = memorial?.toDto(), ) @@ -68,3 +81,35 @@ fun CreateMemorialPayload.toRequest() = memorial = memorial.toDto(), receivers = receiverIds.map { AfternoteReceiverRefDto(receiverId = it) }, ) + +fun MemorialWritePayload.toDto() = + AfternotePlaylistDto( + memorialPhotoUrl = memorialPhotoUrl, + songs = songs.map { it.toDto() }, + memorialVideo = memorialVideo?.toDto(), + ) + +fun MemorialSongPayload.toDto() = + AfternoteSongDto( + id = id, + title = title, + artist = artist, + coverUrl = coverUrl, + ) + +fun MemorialVideoPayload.toDto() = + AfternoteMemorialVideoDto( + videoUrl = videoUrl, + thumbnailUrl = thumbnailUrl, + ) + +fun AfternoteAccountCredentials.toDto() = + AfternoteCredentialsDto( + id = id, + password = password, + ) + +fun ReceiverRefPayload.toDto() = + AfternoteReceiverRefDto( + receiverId = receiverId, + ) diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToDto.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToDto.kt deleted file mode 100644 index 33964bd7b6..0000000000 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/InputToDto.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.afternote.feature.afternote.data.mapper - -import com.afternote.feature.afternote.data.dto.AfternoteCredentialsDto -import com.afternote.feature.afternote.data.dto.AfternoteMemorialVideoDto -import com.afternote.feature.afternote.data.dto.AfternoteReceiverRefDto -import com.afternote.feature.afternote.domain.model.author.AfternoteAccountCredentials -import com.afternote.feature.afternote.domain.model.author.MemorialVideoPayload -import com.afternote.feature.afternote.domain.model.author.ReceiverRefPayload - -fun MemorialVideoPayload.toDto() = - AfternoteMemorialVideoDto( - videoUrl = videoUrl, - thumbnailUrl = thumbnailUrl, - ) - -fun AfternoteAccountCredentials.toDto() = - AfternoteCredentialsDto( - id = id, - password = password, - ) - -fun ReceiverRefPayload.toDto() = - AfternoteReceiverRefDto( - receiverId = receiverId, - ) - -fun List?.toDto() = - this?.map { - it.toDto() - } diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/PlaylistInputToDto.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/PlaylistInputToDto.kt deleted file mode 100644 index 9e081f6a69..0000000000 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/PlaylistInputToDto.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.afternote.feature.afternote.data.mapper - -import com.afternote.feature.afternote.data.dto.AfternotePlaylistDto -import com.afternote.feature.afternote.data.dto.AfternoteSongDto -import com.afternote.feature.afternote.domain.model.author.MemorialSongPayload -import com.afternote.feature.afternote.domain.model.author.MemorialWritePayload - -fun MemorialWritePayload.toDto() = - AfternotePlaylistDto( - memorialPhotoUrl = memorialPhotoUrl, - songs = songs.toDto(), - memorialVideo = memorialVideo?.toDto(), - ) - -fun MemorialSongPayload.toDto() = - AfternoteSongDto( - id = id, - title = title, - artist = artist, - coverUrl = coverUrl, - ) - -fun List.toDto() = - map { - it.toDto() - } diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/MappingUtils.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/ServerDateFormat.kt similarity index 100% rename from feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/MappingUtils.kt rename to feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/mapper/ServerDateFormat.kt diff --git a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/repositoryimpl/author/AfternoteRepositoryImpl.kt b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/repositoryimpl/author/AfternoteRepositoryImpl.kt index 5c9f595971..3abdef4fc9 100644 --- a/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/repositoryimpl/author/AfternoteRepositoryImpl.kt +++ b/feature/afternote/data/src/main/kotlin/com/afternote/feature/afternote/data/repositoryimpl/author/AfternoteRepositoryImpl.kt @@ -7,8 +7,8 @@ import androidx.paging.PagingData import com.afternote.core.common.result.runCatchingCancellable import com.afternote.core.network.model.requireData import com.afternote.core.network.model.requireStatus -import com.afternote.feature.afternote.data.mapper.response.toDetailDomain import com.afternote.feature.afternote.data.mapper.toBusinessRequest +import com.afternote.feature.afternote.data.mapper.toDomain import com.afternote.feature.afternote.data.mapper.toRequest import com.afternote.feature.afternote.data.mapper.toServerCategory import com.afternote.feature.afternote.data.mapper.toSocialRequest @@ -56,7 +56,7 @@ class AfternoteRepositoryImpl override suspend fun getDetail(id: Long): Result = safeCall { - api.getAfternoteDetail(afternoteId = id).requireData().toDetailDomain() + api.getAfternoteDetail(afternoteId = id).requireData().toDomain() } override suspend fun createSocial(payload: CreateAccountPayload): Result = diff --git a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapperTest.kt b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapperTest.kt similarity index 82% rename from feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapperTest.kt rename to feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapperTest.kt index d2ad8197c8..f725bb1abe 100644 --- a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/response/AfternoteDetailMapperTest.kt +++ b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteDetailMapperTest.kt @@ -1,4 +1,4 @@ -package com.afternote.feature.afternote.data.mapper.response +package com.afternote.feature.afternote.data.mapper import com.afternote.feature.afternote.data.dto.AfternoteCredentialsDto import com.afternote.feature.afternote.data.dto.AfternoteDetailDto @@ -17,14 +17,14 @@ import org.junit.Assert.assertTrue import org.junit.Test /** - * [AfternoteDetailDto.toDetailDomain] 회귀 가드 (작성자 상세). + * [AfternoteDetailDto.toDomain] 회귀 가드 (작성자 상세). * 핵심 경계: 공통 필드와 타입별 [DetailContent] 분리, 부분·부재 credentials 의 빈 값 강등, * receivers null→emptyList, receiver 필드 null→"", processingMethods null→emptyList, * memorialVideo null→video/thumbnail null. */ class AfternoteDetailMapperTest { @Test - fun `toDetailDomain - gallery 최소 응답은 컬렉션이 비어 있다`() { + fun `toDomain - gallery 최소 응답은 컬렉션이 비어 있다`() { val result = AfternoteDetailDto( isDraft = false, @@ -32,7 +32,7 @@ class AfternoteDetailMapperTest { afternoteId = 1L, category = "GALLERY", title = "t", - ).toDetailDomain() + ).toDomain() assertEquals(1L, result.id) val content = result.content as DetailContent.Gallery @@ -42,7 +42,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - 사업자 상세는 BUSINESS 로 올라온다 - 소셜로 둔갑하지 않는다`() { + fun `toDomain - 사업자 상세는 BUSINESS 로 올라온다 - 소셜로 둔갑하지 않는다`() { val result = AfternoteDetailDto( isDraft = false, @@ -50,13 +50,13 @@ class AfternoteDetailMapperTest { afternoteId = 1L, category = "BUSINESS", title = "t", - ).toDetailDomain() + ).toDomain() assertTrue("사업자는 Business 내용으로 올라와야 한다", result.content is DetailContent.Business) } @Test - fun `toDetailDomain - 해석할 수 없는 category 는 실패다 - 임의의 종류로 메우지 않는다`() { + fun `toDomain - 해석할 수 없는 category 는 실패다 - 임의의 종류로 메우지 않는다`() { val thrown = assertThrows(IllegalArgumentException::class.java) { AfternoteDetailDto( @@ -65,7 +65,7 @@ class AfternoteDetailMapperTest { afternoteId = 42L, category = "???", title = "t", - ).toDetailDomain() + ).toDomain() } assertTrue( @@ -75,7 +75,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - timestamps 포맷`() { + fun `toDomain - timestamps 포맷`() { val result = AfternoteDetailDto( isDraft = false, @@ -84,13 +84,13 @@ class AfternoteDetailMapperTest { category = "GALLERY", title = "t", updatedAt = "2025-12-01T09:00:00", - ).toDetailDomain() + ).toDomain() assertEquals("2025.12.01", result.timestamps.updatedAt) } @Test - fun `toDetailDomain - receiver의 null 필드는 빈 문자열`() { + fun `toDomain - receiver의 null 필드는 빈 문자열`() { val result = AfternoteDetailDto( isDraft = false, @@ -98,7 +98,7 @@ class AfternoteDetailMapperTest { category = "GALLERY", title = "t", receivers = listOf(AfternoteDetailReceiverDto(receiverId = 5L)), - ).toDetailDomain() + ).toDomain() val receiver = result.receivers.single() assertTrue(result.content is DetailContent.Gallery) @@ -111,7 +111,7 @@ class AfternoteDetailMapperTest { * DTO 는 방어적으로 receiverId 가 nullable 이지만 도메인은 non-null 이므로, 경계인 이 매퍼가 걸러야 한다. */ @Test - fun `toDetailDomain - receiverId 없는 항목은 도메인으로 올리지 않는다`() { + fun `toDomain - receiverId 없는 항목은 도메인으로 올리지 않는다`() { val result = AfternoteDetailDto( isDraft = false, @@ -123,13 +123,13 @@ class AfternoteDetailMapperTest { AfternoteDetailReceiverDto(receiverId = null, name = "식별자없음"), AfternoteDetailReceiverDto(receiverId = 9L, name = "김수신"), ), - ).toDetailDomain() + ).toDomain() assertEquals(listOf(9L), result.receivers.map { it.receiverId }) } @Test - fun `toDetailDomain - credentials 매핑`() { + fun `toDomain - credentials 매핑`() { val result = AfternoteDetailDto( isDraft = false, @@ -138,7 +138,7 @@ class AfternoteDetailMapperTest { category = "SOCIAL", title = "t", credentials = AfternoteCredentialsDto(id = "user", password = "pw"), - ).toDetailDomain() + ).toDomain() val credentials = (result.content as DetailContent.SocialNetwork).credentials assertEquals("user", credentials.id) @@ -146,7 +146,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - credentials가 아예 없으면 빈 값으로 낮춘다`() { + fun `toDomain - credentials가 아예 없으면 빈 값으로 낮춘다`() { val result = AfternoteDetailDto( isDraft = false, @@ -154,7 +154,7 @@ class AfternoteDetailMapperTest { afternoteId = 1L, category = "SOCIAL", title = "t", - ).toDetailDomain() + ).toDomain() val credentials = (result.content as DetailContent.SocialNetwork).credentials assertEquals("", credentials.id) @@ -162,7 +162,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - credentials id만 없으면 id를 빈 값으로 낮춘다`() { + fun `toDomain - credentials id만 없으면 id를 빈 값으로 낮춘다`() { val result = AfternoteDetailDto( isDraft = false, @@ -171,7 +171,7 @@ class AfternoteDetailMapperTest { category = "SOCIAL", title = "t", credentials = AfternoteCredentialsDto(id = null, password = "pw"), - ).toDetailDomain() + ).toDomain() val credentials = (result.content as DetailContent.SocialNetwork).credentials assertEquals("", credentials.id) @@ -179,7 +179,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - credentials password만 없으면 password를 빈 값으로 낮춘다`() { + fun `toDomain - credentials password만 없으면 password를 빈 값으로 낮춘다`() { val result = AfternoteDetailDto( isDraft = false, @@ -188,7 +188,7 @@ class AfternoteDetailMapperTest { category = "SOCIAL", title = "t", credentials = AfternoteCredentialsDto(id = "user", password = null), - ).toDetailDomain() + ).toDomain() val credentials = (result.content as DetailContent.SocialNetwork).credentials assertEquals("user", credentials.id) @@ -196,7 +196,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - playlist 미디어·곡 매핑`() { + fun `toDomain - playlist 미디어·곡 매핑`() { val result = AfternoteDetailDto( isDraft = false, @@ -210,7 +210,7 @@ class AfternoteDetailMapperTest { songs = listOf(AfternoteSongDto(id = 3L, title = "s", artist = "a")), memorialVideo = AfternoteMemorialVideoDto(videoUrl = "v.mp4", thumbnailUrl = "t.jpg"), ), - ).toDetailDomain() + ).toDomain() val memorial = (result.content as DetailContent.Memorial).memorial val media = memorial.media @@ -228,7 +228,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - playlist의 공통 leaveMessage도 보존한다`() { + fun `toDomain - playlist의 공통 leaveMessage도 보존한다`() { val result = AfternoteDetailDto( isDraft = false, @@ -238,7 +238,7 @@ class AfternoteDetailMapperTest { title = "t", leaveMessage = listOf(LeaveMessageBlockDto(title = "가족에게", body = "잘 지내")), memorial = AfternotePlaylistDto(), - ).toDetailDomain() + ).toDomain() assertEquals( listOf(LeaveMessageBlock(title = "가족에게", body = "잘 지내")), @@ -247,7 +247,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - memorialVideo null이면 video thumbnail null`() { + fun `toDomain - memorialVideo null이면 video thumbnail null`() { val result = AfternoteDetailDto( isDraft = false, @@ -256,7 +256,7 @@ class AfternoteDetailMapperTest { category = "PLAYLIST", title = "t", memorial = AfternotePlaylistDto(memorialVideo = null), - ).toDetailDomain() + ).toDomain() val media = (result.content as DetailContent.Memorial).memorial.media assertNull(media.videoUrl) @@ -264,7 +264,7 @@ class AfternoteDetailMapperTest { } @Test - fun `toDetailDomain - playlist 타입에 playlist가 없으면 오류`() { + fun `toDomain - playlist 타입에 playlist가 없으면 오류`() { val exception = assertThrows(IllegalArgumentException::class.java) { AfternoteDetailDto( @@ -273,14 +273,14 @@ class AfternoteDetailMapperTest { afternoteId = 1L, category = "PLAYLIST", title = "t", - ).toDetailDomain() + ).toDomain() } assertEquals("playlist is required for MEMORIAL detail", exception.message) } @Test - fun `toDetailDomain - 사업자 상세도 credentials 를 Business 내용에 싣는다`() { + fun `toDomain - 사업자 상세도 credentials 를 Business 내용에 싣는다`() { val business = AfternoteDetailDto( isDraft = false, @@ -289,7 +289,7 @@ class AfternoteDetailMapperTest { category = "BUSINESS", title = "회사 계정", credentials = AfternoteCredentialsDto(id = "user", password = "pw"), - ).toDetailDomain() + ).toDomain() val content = business.content as DetailContent.Business assertEquals(AfternoteType.BUSINESS, content.type) @@ -299,7 +299,7 @@ class AfternoteDetailMapperTest { /** `ESTATE`(#491)는 아직 서버 enum 에 없어 응답으로 올라올 수 없다 — 왔다면 해석 실패다. */ @Test - fun `toDetailDomain - ESTATE 는 서버가 보낼 수 없는 값이라 해석 실패다`() { + fun `toDomain - ESTATE 는 서버가 보낼 수 없는 값이라 해석 실패다`() { assertThrows(IllegalArgumentException::class.java) { AfternoteDetailDto( isDraft = false, @@ -307,7 +307,7 @@ class AfternoteDetailMapperTest { afternoteId = 2L, category = "ESTATE", title = "부동산", - ).toDetailDomain() + ).toDomain() } } } diff --git a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemDtoToDomainTest.kt b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemMapperTest.kt similarity index 98% rename from feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemDtoToDomainTest.kt rename to feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemMapperTest.kt index 73c4efcba6..6e5d2f89f6 100644 --- a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemDtoToDomainTest.kt +++ b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/AfternoteListItemMapperTest.kt @@ -13,7 +13,7 @@ import org.junit.Test * * 항목 매퍼를 따로 노출하지 않으므로 단건도 이 소비 경로로 확인한다 — 실제로 도는 경로 그대로다. */ -class AfternoteListItemDtoToDomainTest { +class AfternoteListItemMapperTest { @Test fun `필드와 Long id를 그대로 매핑`() { val result = diff --git a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/LeaveMessageBlockContractTest.kt b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/LeaveMessageBlockContractTest.kt index f6fa75f9e7..96cada1ae1 100644 --- a/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/LeaveMessageBlockContractTest.kt +++ b/feature/afternote/data/src/test/java/com/afternote/feature/afternote/data/mapper/LeaveMessageBlockContractTest.kt @@ -3,7 +3,6 @@ package com.afternote.feature.afternote.data.mapper import com.afternote.feature.afternote.data.dto.AfternoteCreateAccountRequestDto import com.afternote.feature.afternote.data.dto.AfternoteDetailDto import com.afternote.feature.afternote.data.dto.LeaveMessageBlockDto -import com.afternote.feature.afternote.data.mapper.response.toDetailDomain import com.afternote.feature.afternote.domain.model.LeaveMessageBlock import com.afternote.feature.receiver.data.dto.ReceivedAfternoteDetailDto import com.afternote.feature.receiver.data.dto.ReceivedAfternoteListDto @@ -46,7 +45,7 @@ class LeaveMessageBlockContractTest { "playlist":null,"updatedAt":"2026-08-07T06:21:14.553567"} """.trimIndent() - val detail = json.decodeFromString(response).toDetailDomain() + val detail = json.decodeFromString(response).toDomain() assertEquals( listOf( @@ -64,7 +63,7 @@ class LeaveMessageBlockContractTest { json .decodeFromString( """{"afternoteId":11,"category":"SOCIAL","title":"t","isDraft":false,"receivers":[],"credentials":{"id":"qa","password":"qa"},"leaveMessage":[{"title":"","body":"재현용 남기실 말씀"}]}""", - ).toDetailDomain() + ).toDomain() assertEquals( listOf(LeaveMessageBlock(title = "", body = "재현용 남기실 말씀")), @@ -78,7 +77,7 @@ class LeaveMessageBlockContractTest { json .decodeFromString( """{"afternoteId":1,"category":"SOCIAL","title":"t","isDraft":false,"receivers":[],"credentials":{"id":"qa","password":"qa"},"leaveMessage":null}""", - ).toDetailDomain() + ).toDomain() assertTrue(detail.leaveMessageBlocks.isEmpty()) } diff --git a/feature/receiver/data/build.gradle.kts b/feature/receiver/data/build.gradle.kts index de799eefda..45f158da13 100644 --- a/feature/receiver/data/build.gradle.kts +++ b/feature/receiver/data/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { implementation(projects.core.domain) implementation(projects.core.model) implementation(projects.feature.receiver.domain) - // 수신 상세가 애프터노트 도메인 모델·공유 매퍼(MappingUtils 등)·author 서비스(내려받기)를 + // 수신 상세가 애프터노트 도메인 모델·공유 매퍼(ServerDateFormat 등)·author 서비스(내려받기)를 // 참조한다. 공유 지점의 receiver 몫 분리는 후속 판단. implementation(projects.feature.afternote.domain) implementation(projects.feature.afternote.data)