Skip to content
This repository was archived by the owner on Jul 7, 2025. It is now read-only.

Commit 9c43dcf

Browse files
authored
Merge pull request #132 from ASAP-Lettering/ASAP-457
ASAP-457 회원가입 시 비회원 편지 코드 처리 로직 추가
2 parents c6f9d5e + 855674e commit 9c43dcf

File tree

10 files changed

+173
-43
lines changed

10 files changed

+173
-43
lines changed

Application-Module/src/main/kotlin/com/asap/application/letter/port/in/AddLetterUsecase.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ interface AddLetterUsecase {
55

66
fun addPhysicalLetter(command: Command.AddPhysicalLetter)
77

8+
fun addAnonymousLetter(command: Command.AddAnonymousLetter)
9+
810
sealed class Command {
911
data class VerifyLetter(
1012
val letterId: String,
@@ -19,5 +21,10 @@ interface AddLetterUsecase {
1921
val userId: String,
2022
val draftId: String?,
2123
) : Command()
24+
25+
data class AddAnonymousLetter(
26+
val letterCode: String,
27+
val userId: String,
28+
) : Command()
2229
}
2330
}

Application-Module/src/main/kotlin/com/asap/application/letter/service/LetterCommandService.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ class LetterCommandService(
152152
independentLetterManagementPort.save(independentLetter)
153153
}
154154

155+
override fun addAnonymousLetter(command: AddLetterUsecase.Command.AddAnonymousLetter) {
156+
val sendLetter = sendLetterManagementPort.getLetterByCodeNotNull(command.letterCode)
157+
val user = userManagementPort.getUserNotNull(DomainId(command.userId))
158+
159+
sendLetter.configSenderId(user.id)
160+
sendLetterManagementPort.save(sendLetter)
161+
}
162+
155163
override fun moveToSpace(command: MoveLetterUsecase.Command.ToSpace) {
156164
independentLetterManagementPort.getIndependentLetterByIdNotNull(DomainId(command.letterId)).apply {
157165
val spaceLetter = SpaceLetter.createByIndependentLetter(this, DomainId(command.spaceId))

Application-Module/src/main/kotlin/com/asap/application/user/port/in/RegisterUserUsecase.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,20 @@ package com.asap.application.user.port.`in`
33
import java.time.LocalDate
44

55
interface RegisterUserUsecase {
6-
76
fun registerUser(command: Command): Response
87

9-
108
data class Command(
119
val registerToken: String,
1210
val servicePermission: Boolean,
1311
val privatePermission: Boolean,
1412
val marketingPermission: Boolean,
1513
val birthday: LocalDate?,
16-
val realName: String
14+
val realName: String,
1715
)
1816

1917
data class Response(
2018
val accessToken: String,
21-
val refreshToken: String
19+
val refreshToken: String,
20+
val userId: String,
2221
)
23-
}
22+
}

Application-Module/src/main/kotlin/com/asap/application/user/service/UserCommandService.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,19 @@ class UserCommandService(
6262

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

65-
return RegisterUserUsecase.Response(accessToken, refreshToken)
65+
return RegisterUserUsecase.Response(accessToken, refreshToken, registerUser.id.value)
6666
}
6767

6868
override fun delete(command: DeleteUserUsecase.Command) {
69-
userManagementPort
70-
.getUserNotNull(DomainId(command.userId))
71-
.apply {
72-
this.delete(command.reason)
73-
userManagementPort.save(this)
74-
}.also {
75-
userAuthManagementPort.getNotNull(it.id).apply {
76-
this.delete()
77-
userAuthManagementPort.saveUserAuth(this)
78-
}
79-
}
69+
val user = userManagementPort.getUserNotNull(DomainId(command.userId))
70+
71+
user.delete(command.reason)
72+
userManagementPort.save(user)
73+
74+
val userAuth = userAuthManagementPort.getNotNull(user.id)
75+
76+
userAuth.delete()
77+
userAuthManagementPort.saveUserAuth(userAuth)
8078
}
8179

8280
override fun executeFor(command: UpdateUserUsecase.Command.Birthday) {
@@ -95,6 +93,5 @@ class UserCommandService(
9593
this.updateOnboarding()
9694
userManagementPort.save(this)
9795
}
98-
9996
}
10097
}

Application-Module/src/test/kotlin/com/asap/application/letter/service/LetterCommandServiceTest.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,40 @@ class LetterCommandServiceTest :
362362
}
363363
}
364364

365+
366+
given("익명 편지를 사용자의 편지로 추가할 때") {
367+
val letterCode = "letter-code"
368+
val userId = "user-id"
369+
val command = AddLetterUsecase.Command.AddAnonymousLetter(
370+
letterCode = letterCode,
371+
userId = userId,
372+
)
373+
374+
// Create an anonymous letter using SendLetter.createAnonymous
375+
val content = LetterContent(
376+
content = "content",
377+
templateType = 1,
378+
images = mutableListOf("image1", "image2"),
379+
)
380+
val sendLetter = SendLetter.createAnonymous(
381+
content = content,
382+
receiverName = "receiverName",
383+
letterCode = letterCode,
384+
)
385+
386+
every {
387+
mockSendLetterManagementPort.getLetterByCodeNotNull(letterCode)
388+
} returns sendLetter
389+
390+
`when`("익명 편지를 사용자의 편지로 추가하면") {
391+
letterCommandService.addAnonymousLetter(command)
392+
393+
then("편지의 발신자 ID가 설정되고 저장되어야 한다") {
394+
verify { mockSendLetterManagementPort.save(sendLetter) }
395+
}
396+
}
397+
}
398+
365399
given("보낸 편지 삭제 요청이 들어올 때") {
366400
val userId = "user-id"
367401
val sendLetters =

Bootstrap-Module/src/main/kotlin/com/asap/bootstrap/web/user/controller/UserController.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.asap.bootstrap.web.user.controller
22

3+
import com.asap.application.letter.port.`in`.AddLetterUsecase
34
import com.asap.application.user.port.`in`.*
45
import com.asap.bootstrap.web.user.api.UserApi
56
import com.asap.bootstrap.web.user.dto.*
@@ -12,6 +13,7 @@ class UserController(
1213
private val deleteUserUsecase: DeleteUserUsecase,
1314
private val getUserInfoUsecase: GetUserInfoUsecase,
1415
private val updateUserUsecase: UpdateUserUsecase,
16+
private val addLetterUsecase: AddLetterUsecase,
1517
) : UserApi {
1618
override fun registerUser(request: RegisterUserRequest): RegisterUserResponse {
1719
val response =
@@ -25,6 +27,17 @@ class UserController(
2527
request.realName,
2628
),
2729
)
30+
31+
// Handle anonymous letter code if it exists
32+
request.anonymousSendLetterCode?.let { letterCode ->
33+
addLetterUsecase.addAnonymousLetter(
34+
AddLetterUsecase.Command.AddAnonymousLetter(
35+
letterCode = letterCode,
36+
userId = response.userId,
37+
),
38+
)
39+
}
40+
2841
return RegisterUserResponse(response.accessToken, response.refreshToken)
2942
}
3043

Bootstrap-Module/src/main/kotlin/com/asap/bootstrap/web/user/dto/RegisterUserRequest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ data class RegisterUserRequest(
1616
@Schema(description = "생년 월일, yyyy-MM-dd, 값이 안넘어올 수 있음")
1717
val birthday: LocalDate?,
1818
@Schema(description = "실명")
19-
val realName: String
20-
) {
21-
}
19+
val realName: String,
20+
@Schema(description = "비회원 상태로 전송한 편지의 코드")
21+
val anonymousSendLetterCode: String?,
22+
)

Bootstrap-Module/src/test/kotlin/com/asap/bootstrap/acceptance/user/controller/UserControllerTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class UserControllerTest : AcceptanceSupporter() {
4040
@Test
4141
fun registerUserTest() {
4242
// given
43-
val request = RegisterUserRequest("register", true, true, true, LocalDate.now(), "realName")
43+
val request = RegisterUserRequest("register", true, true, true, LocalDate.now(), "realName", null)
4444
val command =
4545
RegisterUserUsecase.Command(
4646
request.registerToken,
@@ -53,8 +53,9 @@ class UserControllerTest : AcceptanceSupporter() {
5353
given(registerUserUsecase.registerUser(command)).willReturn(
5454
RegisterUserUsecase.Response(
5555
"accessToken",
56-
"refreshToken"
57-
)
56+
"refreshToken",
57+
"userId",
58+
),
5859
)
5960
// when
6061
val response =

0 commit comments

Comments
 (0)