Skip to content

#141, 142 - 쪽지 답장 온보딩 시트 조회 API를 구현합니다. #164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ enum class OnBoardingComponentRequest {

MESSAGE,
VOTE,
ANSWER_MESSAGE,
;

}
34 changes: 22 additions & 12 deletions core/src/main/kotlin/com/wespot/common/dto/OnBoardingResponse.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import com.wespot.common.dto.view.ImageComponentResponse
import com.wespot.common.dto.view.TextComponentResponse
import com.wespot.common.dto.view.TextListComponentResponse
import com.wespot.view.OnBoardingBottomSheetComponent
import com.wespot.view.OnBoardingExplanationComponent
import com.wespot.view.OnBoardingWelcomePageComponent

data class OnBoardingResponse(
val id: Long,
Expand All @@ -14,33 +16,41 @@ data class OnBoardingResponse(

companion object {

fun fromFirstPage(onBoardingBottomSheetComponent: OnBoardingBottomSheetComponent): OnBoardingResponse {
fun fromFirstPage(
id: Long = 1,
onBoardingBottomSheetComponentName: String,
onBoardingWelcomePageComponent: OnBoardingWelcomePageComponent
): OnBoardingResponse {
return OnBoardingResponse(
id = 1,
name = onBoardingBottomSheetComponent.name,
id = id,
name = onBoardingBottomSheetComponentName,
data = listOf(
ContentSectionResponse.from(
TextComponentResponse.from(onBoardingBottomSheetComponent.onBoardingWelcomePageComponent.textComponent),
ImageComponentResponse.from(onBoardingBottomSheetComponent.onBoardingWelcomePageComponent.imageComponent)
TextComponentResponse.from(onBoardingWelcomePageComponent.textComponent),
ImageComponentResponse.from(onBoardingWelcomePageComponent.imageComponent)
),
BottomSectionResponse.from(
ButtonsComponentResponse.from(onBoardingBottomSheetComponent.onBoardingWelcomePageComponent.buttonsComponent)
ButtonsComponentResponse.from(onBoardingWelcomePageComponent.buttonsComponent)
),
)
)
}

fun fromSecondPage(onBoardingBottomSheetComponent: OnBoardingBottomSheetComponent): OnBoardingResponse {
fun fromSecondPage(
id: Long = 2,
onBoardingBottomSheetComponentName: String,
onBoardingExplanationComponent: OnBoardingExplanationComponent
): OnBoardingResponse {
return OnBoardingResponse(
id = 2,
name = onBoardingBottomSheetComponent.name,
id = id,
name = onBoardingBottomSheetComponentName,
data = listOf(
ContentSectionResponse.from(
TextComponentResponse.from(onBoardingBottomSheetComponent.onBoardingExplanationComponent.textComponent),
TextListComponentResponse.from(onBoardingBottomSheetComponent.onBoardingExplanationComponent.textListComponent)
TextComponentResponse.from(onBoardingExplanationComponent.textComponent),
TextListComponentResponse.from(onBoardingExplanationComponent.textListComponent)
),
BottomSectionResponse.from(
ButtonsComponentResponse.from(onBoardingBottomSheetComponent.onBoardingExplanationComponent.buttonsComponent)
ButtonsComponentResponse.from(onBoardingExplanationComponent.buttonsComponent)
)
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class OnBoardingService(
private val viewedOnBoardingSheetPort: ViewedOnBoardingSheetPort,
) : OnBoardingUseCase {

@Transactional(readOnly = true)
override fun getOnBoardingComponents(category: OnBoardingComponentRequest): List<OnBoardingResponse> {
val userId = SecurityUtils.getLoginUser(userPort).id
val viewedOnBoardingSheet = viewedOnBoardingSheetPort.findByUserId(userId) ?: throw CustomException(
Expand All @@ -33,9 +34,21 @@ class OnBoardingService(

val onBoardingBottomSheetComponent = OnBoardingBottomSheetComponent.fromWithCategory(category.name)

return listOf(
OnBoardingResponse.fromFirstPage(onBoardingBottomSheetComponent),
OnBoardingResponse.fromSecondPage(onBoardingBottomSheetComponent)
val firstPage = onBoardingBottomSheetComponent.onBoardingWelcomePageComponent
val secondPage = onBoardingBottomSheetComponent.onBoardingExplanationComponent
var pageId = 0L

return listOfNotNull(
if (firstPage == null) null else OnBoardingResponse.fromFirstPage(
id = ++pageId,
onBoardingBottomSheetComponentName = onBoardingBottomSheetComponent.name,
onBoardingWelcomePageComponent = firstPage
),
if (secondPage == null) null else OnBoardingResponse.fromSecondPage(
id = ++pageId,
onBoardingBottomSheetComponentName = onBoardingBottomSheetComponent.name,
onBoardingExplanationComponent = secondPage
)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ class GetMessageV2Service(
val loginUser = SecurityUtils.getLoginUser(userPort = userPort)

val sentMessageRooms =
sentMessageRoomsFinder.invoke(loginUser.id) // messageV2Port.findAllMessageRoomBySenderId(senderId = loginUser.id)
sentMessageRoomsFinder.invoke(loginUser.id)
val receivedMessageRooms =
receivedMessageRoomsFinder.invoke(loginUser.id) // messageV2Port.findAllMessageRoomByReceiverId(receiverId = loginUser.id)
receivedMessageRoomsFinder.invoke(loginUser.id)

val rooms: List<MessageV2> = sentMessageRooms + receivedMessageRooms

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ data class ViewedOnBoardingSheet(
companion object {
private const val IS_MESSAGE_VIEW = "MESSAGE"
private const val IS_VOTE_VIEW = "VOTE"
private const val IS_ANSWER_MESSAGE_VIEW = "ANSWER_MESSAGE"

fun createInitialState(
userId: Long,
Expand All @@ -37,6 +38,10 @@ data class ViewedOnBoardingSheet(
isViewedVoteOnBoardingSheet = true
}

if (name == IS_ANSWER_MESSAGE_VIEW) {
isViewedAnswerMessageOnBoardingSheet = true
}

commited.call(this)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.wespot.view

data class OnBoardingBottomSheetComponent(
val name: String,
val onBoardingWelcomePageComponent: OnBoardingWelcomePageComponent,
val onBoardingExplanationComponent: OnBoardingExplanationComponent
val onBoardingWelcomePageComponent: OnBoardingWelcomePageComponent?,
val onBoardingExplanationComponent: OnBoardingExplanationComponent?
) {

companion object {
Expand All @@ -16,6 +16,7 @@ data class OnBoardingBottomSheetComponent(
return when (onboardingCategory) {
OnBoardingCategory.MESSAGE -> createMessageType()
OnBoardingCategory.VOTE -> createVoteType()
OnBoardingCategory.ANSWER_MESSAGE -> createAnswerMessageType()
}
}

Expand All @@ -35,6 +36,14 @@ data class OnBoardingBottomSheetComponent(
)
}

private fun createAnswerMessageType(): OnBoardingBottomSheetComponent {
return OnBoardingBottomSheetComponent(
name = TYPE,
onBoardingWelcomePageComponent = null,
onBoardingExplanationComponent = OnBoardingExplanationComponent.createAnswerMessageComponent()
)
}

}

}
3 changes: 3 additions & 0 deletions domain/src/main/kotlin/com/wespot/view/OnBoardingCategory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,18 @@ enum class OnBoardingCategory {

MESSAGE,
VOTE,
ANSWER_MESSAGE,
;

companion object {

fun from(category: String): OnBoardingCategory {
val findValue = valueOf(category.uppercase())

if (Objects.isNull(findValue)) {
throw CustomException(HttpStatus.BAD_REQUEST, ExceptionView.TOAST, "존재하지 않는 온보딩 바텀 sheet 타입입니다.")
}

return findValue
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,61 @@ data class OnBoardingExplanationComponent(
)
}

fun createAnswerMessageComponent(): OnBoardingExplanationComponent {
return OnBoardingExplanationComponent(
textComponent = TextComponent.of(
RichText.of("답장하기에 대해 알려드릴게요", "#FFF7F7F8", 20, "Center", "Bold"),
Copy link
Preview

Copilot AI May 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Consider extracting the hard-coded color value "#FFF7F7F8" (and similar literals) into a constant to improve maintainability and ease future updates.

Suggested change
RichText.of("답장하기에 대해 알려드릴게요", "#FFF7F7F8", 20, "Center", "Bold"),
RichText.of("답장하기에 대해 알려드릴게요", COLOR_TEXT_PRIMARY, 20, "Center", "Bold"),

Copilot uses AI. Check for mistakes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nope i don't want

Paddings.of(bottom = 7)
),
textListComponent = TextListComponent.from(
textLines = listOf(
Pair(
"https://dw2d2daekmyur.cloudfront.net/answer_message_01.png",
RichText.of(
"쪽지는 답장 쪽지를 포함하여 하루에 총 3개만 보낼 수 있어요",
"#FFF7F7F8",
14,
"Start",
null
)
),
Pair(
"https://dw2d2daekmyur.cloudfront.net/answer_message_02.png",
RichText.of(
"상대에게 온 쪽지에 답장을 보내도 남은 쪽지 개수에서 차감돼요",
"#FFF7F7F8",
14,
"Start",
null
)
),
Pair(
"https://dw2d2daekmyur.cloudfront.net/answer_message_03.png",
RichText.of(
"친구가 내 답장을 읽으면 알려드릴게요",
"#FFF7F7F8",
14,
"Start",
null
)
),
)
),
buttonsComponent = ButtonsComponent.of(
listOf(
ButtonComponent.ofWithClickActionType(
RichText.of("이해했어요", "#FF1B1C1E", 16, "Center", "SemiBold"),
"#FFF6FE8B",
"#FFC0C66B",
OnClickActionType.ACTION,
Paddings.of(top = 8, bottom = 8)
)
),
Paddings.of(start = 20, end = 20, bottom = 12, top = 12)
)
)
}

}

}
Loading