Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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(),
)

Expand Down Expand Up @@ -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,
)

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -56,7 +56,7 @@ class AfternoteRepositoryImpl

override suspend fun getDetail(id: Long): Result<Detail> =
safeCall {
api.getAfternoteDetail(afternoteId = id).requireData().toDetailDomain()
api.getAfternoteDetail(afternoteId = id).requireData().toDomain()
}

override suspend fun createSocial(payload: CreateAccountPayload): Result<Long> =
Expand Down
Loading
Loading