Skip to content
This repository was archived by the owner on Jul 7, 2025. It is now read-only.
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 @@ -5,6 +5,8 @@ interface AddLetterUsecase {

fun addPhysicalLetter(command: Command.AddPhysicalLetter)

fun addAnonymousLetter(command: Command.AddAnonymousLetter)

sealed class Command {
data class VerifyLetter(
val letterId: String,
Expand All @@ -19,5 +21,10 @@ interface AddLetterUsecase {
val userId: String,
val draftId: String?,
) : Command()

data class AddAnonymousLetter(
val letterCode: String,
val userId: String,
) : Command()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,14 @@ class LetterCommandService(
independentLetterManagementPort.save(independentLetter)
}

override fun addAnonymousLetter(command: AddLetterUsecase.Command.AddAnonymousLetter) {
val sendLetter = sendLetterManagementPort.getLetterByCodeNotNull(command.letterCode)
val user = userManagementPort.getUserNotNull(DomainId(command.userId))

sendLetter.configSenderId(user.id)
sendLetterManagementPort.save(sendLetter)
}

override fun moveToSpace(command: MoveLetterUsecase.Command.ToSpace) {
independentLetterManagementPort.getIndependentLetterByIdNotNull(DomainId(command.letterId)).apply {
val spaceLetter = SpaceLetter.createByIndependentLetter(this, DomainId(command.spaceId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,20 @@ package com.asap.application.user.port.`in`
import java.time.LocalDate

interface RegisterUserUsecase {

fun registerUser(command: Command): Response


data class Command(
val registerToken: String,
val servicePermission: Boolean,
val privatePermission: Boolean,
val marketingPermission: Boolean,
val birthday: LocalDate?,
val realName: String
val realName: String,
)

data class Response(
val accessToken: String,
val refreshToken: String
val refreshToken: String,
val userId: String,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,21 +62,19 @@ class UserCommandService(

userTokenManagementPort.saveUserToken(UserToken.create(token = refreshToken, userId = registerUser.id))

return RegisterUserUsecase.Response(accessToken, refreshToken)
return RegisterUserUsecase.Response(accessToken, refreshToken, registerUser.id.value)
}

override fun delete(command: DeleteUserUsecase.Command) {
userManagementPort
.getUserNotNull(DomainId(command.userId))
.apply {
this.delete(command.reason)
userManagementPort.save(this)
}.also {
userAuthManagementPort.getNotNull(it.id).apply {
this.delete()
userAuthManagementPort.saveUserAuth(this)
}
}
val user = userManagementPort.getUserNotNull(DomainId(command.userId))

user.delete(command.reason)
userManagementPort.save(user)

val userAuth = userAuthManagementPort.getNotNull(user.id)

userAuth.delete()
userAuthManagementPort.saveUserAuth(userAuth)
}

override fun executeFor(command: UpdateUserUsecase.Command.Birthday) {
Expand All @@ -95,6 +93,5 @@ class UserCommandService(
this.updateOnboarding()
userManagementPort.save(this)
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,40 @@ class LetterCommandServiceTest :
}
}


given("익명 편지를 사용자의 편지로 추가할 때") {
val letterCode = "letter-code"
val userId = "user-id"
val command = AddLetterUsecase.Command.AddAnonymousLetter(
letterCode = letterCode,
userId = userId,
)

// Create an anonymous letter using SendLetter.createAnonymous
val content = LetterContent(
content = "content",
templateType = 1,
images = mutableListOf("image1", "image2"),
)
val sendLetter = SendLetter.createAnonymous(
content = content,
receiverName = "receiverName",
letterCode = letterCode,
)

every {
mockSendLetterManagementPort.getLetterByCodeNotNull(letterCode)
} returns sendLetter

`when`("익명 편지를 사용자의 편지로 추가하면") {
letterCommandService.addAnonymousLetter(command)

then("편지의 발신자 ID가 설정되고 저장되어야 한다") {
verify { mockSendLetterManagementPort.save(sendLetter) }
}
}
}

given("보낸 편지 삭제 요청이 들어올 때") {
val userId = "user-id"
val sendLetters =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.asap.bootstrap.web.user.controller

import com.asap.application.letter.port.`in`.AddLetterUsecase
import com.asap.application.user.port.`in`.*
import com.asap.bootstrap.web.user.api.UserApi
import com.asap.bootstrap.web.user.dto.*
Expand All @@ -12,6 +13,7 @@ class UserController(
private val deleteUserUsecase: DeleteUserUsecase,
private val getUserInfoUsecase: GetUserInfoUsecase,
private val updateUserUsecase: UpdateUserUsecase,
private val addLetterUsecase: AddLetterUsecase,
) : UserApi {
override fun registerUser(request: RegisterUserRequest): RegisterUserResponse {
val response =
Expand All @@ -25,6 +27,17 @@ class UserController(
request.realName,
),
)

// Handle anonymous letter code if it exists
request.anonymousSendLetterCode?.let { letterCode ->
addLetterUsecase.addAnonymousLetter(
AddLetterUsecase.Command.AddAnonymousLetter(
letterCode = letterCode,
userId = response.userId,
),
)
}

return RegisterUserResponse(response.accessToken, response.refreshToken)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ data class RegisterUserRequest(
@Schema(description = "생년 월일, yyyy-MM-dd, 값이 안넘어올 수 있음")
val birthday: LocalDate?,
@Schema(description = "실명")
val realName: String
) {
}
val realName: String,
@Schema(description = "비회원 상태로 전송한 편지의 코드")
val anonymousSendLetterCode: String?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class UserControllerTest : AcceptanceSupporter() {
@Test
fun registerUserTest() {
// given
val request = RegisterUserRequest("register", true, true, true, LocalDate.now(), "realName")
val request = RegisterUserRequest("register", true, true, true, LocalDate.now(), "realName", null)
val command =
RegisterUserUsecase.Command(
request.registerToken,
Expand All @@ -53,8 +53,9 @@ class UserControllerTest : AcceptanceSupporter() {
given(registerUserUsecase.registerUser(command)).willReturn(
RegisterUserUsecase.Response(
"accessToken",
"refreshToken"
)
"refreshToken",
"userId",
),
)
// when
val response =
Expand Down
Loading