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

Commit b04c1ad

Browse files
committed
ASAP-409 IndexedSpace, Space 도메인에 isMain 프로퍼티 적용 및 isMain 여부 수정 api 추가
1 parent 7f1d838 commit b04c1ad

11 files changed

Lines changed: 144 additions & 57 deletions

File tree

Application-Module/src/main/kotlin/com/asap/application/space/port/in/UpdateSpaceIndexUsecase.kt

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.asap.application.space.port.`in`
2+
3+
interface UpdateSpaceUsecase {
4+
fun update(command: Command.Index)
5+
6+
fun update(command: Command.Main)
7+
8+
9+
sealed class Command {
10+
data class Index(
11+
val userId: String,
12+
val orders: List<SpaceOrder>,
13+
) : Command()
14+
15+
data class SpaceOrder(
16+
val spaceId: String,
17+
val index: Int,
18+
)
19+
20+
data class Main(
21+
val userId: String,
22+
val spaceId: String,
23+
) : Command()
24+
}
25+
}

Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceCommandService.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package com.asap.application.space.service
33
import com.asap.application.space.exception.SpaceException
44
import com.asap.application.space.port.`in`.CreateSpaceUsecase
55
import com.asap.application.space.port.`in`.DeleteSpaceUsecase
6-
import com.asap.application.space.port.`in`.UpdateSpaceIndexUsecase
76
import com.asap.application.space.port.`in`.UpdateSpaceNameUsecase
7+
import com.asap.application.space.port.`in`.UpdateSpaceUsecase
88
import com.asap.application.space.port.out.SpaceManagementPort
99
import com.asap.common.exception.DefaultException
1010
import com.asap.domain.common.DomainId
@@ -20,7 +20,7 @@ class SpaceCommandService(
2020
) : CreateSpaceUsecase,
2121
UpdateSpaceNameUsecase,
2222
DeleteSpaceUsecase,
23-
UpdateSpaceIndexUsecase {
23+
UpdateSpaceUsecase {
2424
private val spaceIndexValidator: SpaceIndexValidator = SpaceIndexValidator()
2525

2626
override fun create(command: CreateSpaceUsecase.Command) {
@@ -76,7 +76,7 @@ class SpaceCommandService(
7676
}
7777
}
7878

79-
override fun update(command: UpdateSpaceIndexUsecase.Command) {
79+
override fun update(command: UpdateSpaceUsecase.Command.Index) {
8080
val indexedSpaces = spaceManagementPort.getAllIndexedSpace(DomainId(command.userId))
8181
val changeIndexMap = command.orders.associateBy({ DomainId(it.spaceId) }, { it.index })
8282

@@ -107,4 +107,8 @@ class SpaceCommandService(
107107
spaceManagementPort.update(indexedSpace)
108108
}
109109
}
110+
111+
override fun update(command: UpdateSpaceUsecase.Command.Main) {
112+
TODO("Not yet implemented")
113+
}
110114
}

Application-Module/src/main/kotlin/com/asap/application/space/service/SpaceQueryService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class SpaceQueryService(
4747
GetSpaceUsecase.SpaceDetail(
4848
spaceName = it.name,
4949
letterCount = spaceLetterManagementPort.countSpaceLetterBy(it.id, DomainId(query.userId)),
50-
isMainSpace = it.isMain(),
50+
isMainSpace = it.isMain,
5151
spaceIndex = it.index,
5252
spaceId = it.id.value,
5353
)

Application-Module/src/test/kotlin/com/asap/application/space/service/SpaceCommandServiceTest.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package com.asap.application.space.service
33
import com.asap.application.space.exception.SpaceException
44
import com.asap.application.space.port.`in`.CreateSpaceUsecase
55
import com.asap.application.space.port.`in`.DeleteSpaceUsecase
6-
import com.asap.application.space.port.`in`.UpdateSpaceIndexUsecase
76
import com.asap.application.space.port.`in`.UpdateSpaceNameUsecase
7+
import com.asap.application.space.port.`in`.UpdateSpaceUsecase
88
import com.asap.application.space.port.out.SpaceManagementPort
99
import com.asap.domain.common.DomainId
1010
import com.asap.domain.space.entity.IndexedSpace
@@ -114,12 +114,12 @@ class SpaceCommandServiceTest :
114114

115115
given("스페이스 인덱스 수정 요청이 들어올 때") {
116116
val spaceUpdateIndexCommand =
117-
UpdateSpaceIndexUsecase.Command(
117+
UpdateSpaceUsecase.Command.Index(
118118
userId = "userId",
119119
orders =
120120
listOf(
121-
UpdateSpaceIndexUsecase.Command.SpaceOrder("spaceId1", 1),
122-
UpdateSpaceIndexUsecase.Command.SpaceOrder("spaceId2", 0),
121+
UpdateSpaceUsecase.Command.SpaceOrder("spaceId1", 1),
122+
UpdateSpaceUsecase.Command.SpaceOrder("spaceId2", 0),
123123
),
124124
)
125125
val indexedSpaces =
@@ -159,13 +159,13 @@ class SpaceCommandServiceTest :
159159
}
160160

161161
val invalidCommand =
162-
UpdateSpaceIndexUsecase.Command(
162+
UpdateSpaceUsecase.Command.Index(
163163
userId = "userId",
164164
orders =
165165
listOf(
166-
UpdateSpaceIndexUsecase.Command.SpaceOrder("spaceId1", 1),
167-
UpdateSpaceIndexUsecase.Command.SpaceOrder("spaceId2", 2),
168-
UpdateSpaceIndexUsecase.Command.SpaceOrder("spaceId3", 3),
166+
UpdateSpaceUsecase.Command.SpaceOrder("spaceId1", 1),
167+
UpdateSpaceUsecase.Command.SpaceOrder("spaceId2", 2),
168+
UpdateSpaceUsecase.Command.SpaceOrder("spaceId3", 3),
169169
),
170170
)
171171
every {

Bootstrap-Module/src/main/kotlin/com/asap/bootstrap/web/space/api/SpaceApi.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,21 @@ interface SpaceApi {
114114
@AccessUser userId: String,
115115
)
116116

117+
@Operation(summary = "메인 스페이스 변경")
118+
@PutMapping("/{spaceId}/main")
119+
@ApiResponses(
120+
value = [
121+
ApiResponse(
122+
responseCode = "200",
123+
description = "메인 스페이스 변경 성공",
124+
),
125+
],
126+
)
127+
fun updateSpaceMain(
128+
@PathVariable spaceId: String,
129+
@AccessUser userId: String,
130+
)
131+
117132
@Operation(summary = "여러 스페이스 삭제")
118133
@DeleteMapping
119134
@ApiResponses(

Bootstrap-Module/src/main/kotlin/com/asap/bootstrap/web/space/controller/SpaceController.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class SpaceController(
1212
private val updateSpaceNameUsecase: UpdateSpaceNameUsecase,
1313
private val getSpaceUsecase: GetSpaceUsecase,
1414
private val deleteSpaceUsecase: DeleteSpaceUsecase,
15-
private val updateSpaceIndexUsecase: UpdateSpaceIndexUsecase,
15+
private val updateSpaceUsecase: UpdateSpaceUsecase,
1616
) : SpaceApi {
1717
override fun getMainSpace(userId: String): MainSpaceInfoResponse {
1818
val response =
@@ -83,14 +83,18 @@ class SpaceController(
8383
request: UpdateSpaceOrderRequest,
8484
userId: String,
8585
) {
86-
updateSpaceIndexUsecase.update(
87-
UpdateSpaceIndexUsecase.Command(
86+
updateSpaceUsecase.update(
87+
UpdateSpaceUsecase.Command.Index(
8888
userId = userId,
89-
orders = request.orders.map { UpdateSpaceIndexUsecase.Command.SpaceOrder(it.spaceId, it.index) },
89+
orders = request.orders.map { UpdateSpaceUsecase.Command.SpaceOrder(it.spaceId, it.index) },
9090
),
9191
)
9292
}
9393

94+
override fun updateSpaceMain(spaceId: String, userId: String) {
95+
96+
}
97+
9498
override fun deleteSpaces(
9599
request: DeleteMultipleSpacesRequest,
96100
userId: String,

Bootstrap-Module/src/test/kotlin/com/asap/bootstrap/acceptance/space/controller/SpaceControllerTest.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class SpaceControllerTest : AcceptanceSupporter() {
3333
lateinit var deleteSpaceUsecase: DeleteSpaceUsecase
3434

3535
@MockBean
36-
lateinit var updateSpaceIndexUsecase: UpdateSpaceIndexUsecase
36+
lateinit var updateSpaceUsecase: UpdateSpaceUsecase
3737

3838
@Test
3939
fun getMainSpaceId() {
@@ -293,4 +293,20 @@ class SpaceControllerTest : AcceptanceSupporter() {
293293
}
294294
}
295295
}
296+
297+
@Test
298+
fun updateSpaceMain() {
299+
// given
300+
val accessToken = jwtMockManager.generateAccessToken()
301+
val spaceId = "spaceId"
302+
// when
303+
val response =
304+
mockMvc.put("/api/v1/spaces/$spaceId/main") {
305+
header("Authorization", "Bearer $accessToken")
306+
}
307+
// then
308+
response.andExpect {
309+
status { isOk() }
310+
}
311+
}
296312
}

Bootstrap-Module/src/test/kotlin/com/asap/bootstrap/integration/space/SpaceApiIntegrationTest.kt

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
package com.asap.bootstrap.integration.space
22

33
import com.asap.application.space.SpaceMockManager
4+
import com.asap.application.space.port.out.SpaceManagementPort
45
import com.asap.bootstrap.IntegrationSupporter
56
import com.asap.bootstrap.web.space.dto.CreateSpaceRequest
67
import com.asap.bootstrap.web.space.dto.DeleteMultipleSpacesRequest
78
import com.asap.bootstrap.web.space.dto.UpdateSpaceNameRequest
89
import com.asap.bootstrap.web.space.dto.UpdateSpaceOrderRequest
10+
import com.asap.domain.common.DomainId
911
import io.kotest.matchers.maps.haveValue
1012
import io.kotest.matchers.shouldBe
1113
import io.kotest.matchers.string.haveLength
1214
import org.junit.jupiter.api.DisplayName
1315
import org.junit.jupiter.api.Nested
1416
import org.junit.jupiter.api.Test
15-
import org.springframework.beans.factory.annotation.Autowired
1617
import org.springframework.http.MediaType
1718
import org.springframework.test.web.servlet.delete
1819
import org.springframework.test.web.servlet.get
1920
import org.springframework.test.web.servlet.post
2021
import org.springframework.test.web.servlet.put
2122
import java.util.*
2223

23-
class SpaceApiIntegrationTest : IntegrationSupporter() {
24-
@Autowired
25-
lateinit var spaceMockManager: SpaceMockManager
24+
class SpaceApiIntegrationTest(
25+
private val spaceMockManager: SpaceMockManager,
26+
private val spaceManagementPort: SpaceManagementPort
27+
) : IntegrationSupporter() {
2628

2729
@Nested
2830
inner class GetMainSpace {
@@ -190,26 +192,31 @@ class SpaceApiIntegrationTest : IntegrationSupporter() {
190192
}
191193
}
192194

193-
@Test
194-
fun updateSpaceName() {
195-
// given
196-
val userId = userMockManager.settingUser()
197-
val accessToken = jwtMockManager.generateAccessToken(userId)
198-
val spaceId = spaceMockManager.settingSpace(userId).id.value
199-
val request =
200-
UpdateSpaceNameRequest(
201-
spaceName = "change space name",
202-
)
203-
// when
204-
val response =
205-
mockMvc.put("/api/v1/spaces/$spaceId/name") {
206-
contentType = MediaType.APPLICATION_JSON
207-
content = objectMapper.writeValueAsString(request)
208-
header("Authorization", "Bearer $accessToken")
195+
196+
@Nested
197+
@DisplayName("updateSpaceName")
198+
inner class UpdateSpaceName{
199+
@Test
200+
fun updateSpaceName() {
201+
// given
202+
val userId = userMockManager.settingUser()
203+
val accessToken = jwtMockManager.generateAccessToken(userId)
204+
val spaceId = spaceMockManager.settingSpace(userId).id.value
205+
val request =
206+
UpdateSpaceNameRequest(
207+
spaceName = "change space name",
208+
)
209+
// when
210+
val response =
211+
mockMvc.put("/api/v1/spaces/$spaceId/name") {
212+
contentType = MediaType.APPLICATION_JSON
213+
content = objectMapper.writeValueAsString(request)
214+
header("Authorization", "Bearer $accessToken")
215+
}
216+
// then
217+
response.andExpect {
218+
status { isOk() }
209219
}
210-
// then
211-
response.andExpect {
212-
status { isOk() }
213220
}
214221
}
215222

@@ -612,4 +619,35 @@ class SpaceApiIntegrationTest : IntegrationSupporter() {
612619
}
613620
}
614621
}
622+
623+
@Nested
624+
@DisplayName("updateSpaceMain")
625+
inner class UpdateSpaceMain{
626+
@Test
627+
fun updateSpaceMain() {
628+
// given
629+
val userId = userMockManager.settingUser()
630+
val accessToken = jwtMockManager.generateAccessToken(userId)
631+
val spaceId = spaceMockManager.settingSpace(userId).id.value
632+
(0..2).forEach {
633+
spaceMockManager.settingSpace(userId)
634+
}
635+
// when
636+
val response =
637+
mockMvc.put("/api/v1/spaces/$spaceId/main") {
638+
header("Authorization", "Bearer $accessToken")
639+
}
640+
// then
641+
response.andExpect {
642+
status { isOk() }
643+
}
644+
spaceManagementPort.getAllSpaceBy(DomainId(userId)).forEach {
645+
if(it.id.value == spaceId) {
646+
it.isMain shouldBe true
647+
}else{
648+
it.isMain shouldBe false
649+
}
650+
}
651+
}
652+
}
615653
}

Domain-Module/src/main/kotlin/com/asap/domain/space/entity/IndexedSpace.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ class IndexedSpace(
99
val name: String,
1010
var index: Int,
1111
val templateType: Int,
12+
var isMain: Boolean = false,
1213
) : Aggregate<IndexedSpace>(id) {
13-
fun isMain(): Boolean = index == 0
14-
1514
fun updateIndex(index: Int) {
1615
check(index >= 0) { "Index must be greater than or equal to 0" }
1716
this.index = index

0 commit comments

Comments
 (0)