Skip to content

Commit

Permalink
Merge pull request #88 from ASAP-Lettering/ASAP-201
Browse files Browse the repository at this point in the history
ASAP-201 feat: 행성 삭제시 내부 편지들도 모두 삭제되도록 이벤트 추가
  • Loading branch information
tlarbals824 authored Oct 15, 2024
2 parents 714fefd + ed72ae7 commit ebfed7d
Show file tree
Hide file tree
Showing 27 changed files with 498 additions and 206 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,21 @@ package com.asap.application.letter.port.`in`
interface RemoveLetterUsecase {
fun removeSpaceLetter(command: Command.SpaceLetter)

fun removeSpaceLetterBy(command: Command.SpaceId)

fun removeIndependentLetter(command: Command.IndependentLetter)

sealed class Command {
sealed class Command {
data class SpaceLetter(
val letterId: String,
val userId: String,
) : Command()

data class SpaceId(
val spaceId: String,
val userId: String,
) : Command()

data class IndependentLetter(
val letterId: String,
val userId: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,10 @@ interface SpaceLetterManagementPort {
pageRequest: PageRequest,
): Page<SpaceLetter>

fun getAllBy(
spaceId: DomainId,
userId: DomainId,
): List<SpaceLetter>

fun delete(letter: SpaceLetter)
}
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,16 @@ class LetterCommandService(
spaceLetterManagementPort.delete(spaceLetter)
}

override fun removeSpaceLetterBy(command: RemoveLetterUsecase.Command.SpaceId) {
spaceLetterManagementPort
.getAllBy(
spaceId = DomainId(command.spaceId),
userId = DomainId(command.userId),
).forEach {
spaceLetterManagementPort.delete(it)
}
}

override fun removeIndependentLetter(command: RemoveLetterUsecase.Command.IndependentLetter) {
val independentLetter =
independentLetterManagementPort.getIndependentLetterByIdNotNull(DomainId(command.letterId))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.asap.application.space.event

data class SpaceDeletedEvent(
val userId: String,
val spaceId: String,
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.asap.application.space.port.`in`

interface SpaceCreateUsecase {

interface CreateSpaceUsecase {
fun create(command: Command)

data class Command(
val userId: String,
val spaceName: String,
val templateType: Int
val templateType: Int,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.asap.application.space.port.`in`

interface DeleteSpaceUsecase {
fun deleteOne(command: DeleteOneCommand)

fun deleteAll(command: DeleteAllCommand)

data class DeleteOneCommand(
val userId: String,
val spaceId: String,
)

data class DeleteAllCommand(
val spaceIds: List<String>,
val userId: String,
)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.asap.application.space.port.`in`

interface MainSpaceGetUsecase {
interface GetMainSpaceUsecase {
fun get(query: Query): Response

data class Query(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.asap.application.space.port.`in`

interface SpaceGetUsecase {
interface GetSpaceUsecase {
fun getAll(query: GetAllQuery): GetAllResponse

fun get(query: GetQuery): GetResponse
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.asap.application.space.port.`in`

interface SpaceUpdateIndexUsecase {

interface UpdateSpaceIndexUsecase {
fun update(command: Command)

data class Command(
val userId: String,
val orders: List<SpaceOrder>
val orders: List<SpaceOrder>,
) {

data class SpaceOrder(
val spaceId: String,
val index: Int
val index: Int,
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.asap.application.space.port.`in`

interface SpaceUpdateNameUsecase {

interface UpdateSpaceNameUsecase {
fun update(command: Command)

data class Command(
val userId: String,
val spaceId: String,
val name: String
val name: String,
)

}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,32 @@
package com.asap.application.space.service

import com.asap.application.space.event.SpaceDeletedEvent
import com.asap.application.space.exception.SpaceException
import com.asap.application.space.port.`in`.SpaceCreateUsecase
import com.asap.application.space.port.`in`.SpaceDeleteUsecase
import com.asap.application.space.port.`in`.SpaceUpdateIndexUsecase
import com.asap.application.space.port.`in`.SpaceUpdateNameUsecase
import com.asap.application.space.port.`in`.CreateSpaceUsecase
import com.asap.application.space.port.`in`.DeleteSpaceUsecase
import com.asap.application.space.port.`in`.UpdateSpaceIndexUsecase
import com.asap.application.space.port.`in`.UpdateSpaceNameUsecase
import com.asap.application.space.port.out.SpaceManagementPort
import com.asap.common.exception.DefaultException
import com.asap.domain.common.DomainId
import com.asap.domain.space.entity.Space
import com.asap.domain.space.service.SpaceIndexValidator
import org.springframework.context.ApplicationEventPublisher
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
@Transactional
class SpaceCommandService(
private val spaceManagementPort: SpaceManagementPort,
) : SpaceCreateUsecase,
SpaceUpdateNameUsecase,
SpaceDeleteUsecase,
SpaceUpdateIndexUsecase {
private val applicationEventPublisher: ApplicationEventPublisher,
) : CreateSpaceUsecase,
UpdateSpaceNameUsecase,
DeleteSpaceUsecase,
UpdateSpaceIndexUsecase {
private val spaceIndexValidator: SpaceIndexValidator = SpaceIndexValidator()

override fun create(command: SpaceCreateUsecase.Command) {
override fun create(command: CreateSpaceUsecase.Command) {
Space
.create(
userId = DomainId(command.userId),
Expand All @@ -34,7 +37,7 @@ class SpaceCommandService(
}
}

override fun update(command: SpaceUpdateNameUsecase.Command) {
override fun update(command: UpdateSpaceNameUsecase.Command) {
val space =
spaceManagementPort.getSpaceNotNull(
userId = DomainId(command.userId),
Expand All @@ -44,23 +47,37 @@ class SpaceCommandService(
spaceManagementPort.update(updatedSpace)
}

override fun deleteOne(command: SpaceDeleteUsecase.DeleteOneCommand) {
override fun deleteOne(command: DeleteSpaceUsecase.DeleteOneCommand) {
spaceManagementPort.deleteById(
userId = DomainId(command.userId),
spaceId = DomainId(command.spaceId),
)
applicationEventPublisher.publishEvent(
SpaceDeletedEvent(
userId = command.userId,
spaceId = command.spaceId,
),
)
reIndexingSpaceOrder(DomainId(command.userId))
}

override fun deleteAll(command: SpaceDeleteUsecase.DeleteAllCommand) {
override fun deleteAll(command: DeleteSpaceUsecase.DeleteAllCommand) {
spaceManagementPort.deleteAllBySpaceIds(
userId = DomainId(command.userId),
spaceIds = command.spaceIds.map { DomainId(it) },
)
command.spaceIds.forEach {
applicationEventPublisher.publishEvent(
SpaceDeletedEvent(
userId = command.userId,
spaceId = it,
),
)
}
reIndexingSpaceOrder(DomainId(command.userId))
}

override fun update(command: SpaceUpdateIndexUsecase.Command) {
override fun update(command: UpdateSpaceIndexUsecase.Command) {
val indexedSpaces = spaceManagementPort.getAllIndexedSpace(DomainId(command.userId))
val changeIndexMap = command.orders.associateBy({ DomainId(it.spaceId) }, { it.index })

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.asap.application.space.service

import com.asap.application.letter.port.out.SpaceLetterManagementPort
import com.asap.application.space.port.`in`.MainSpaceGetUsecase
import com.asap.application.space.port.`in`.SpaceGetUsecase
import com.asap.application.space.port.`in`.GetMainSpaceUsecase
import com.asap.application.space.port.`in`.GetSpaceUsecase
import com.asap.application.space.port.out.SpaceManagementPort
import com.asap.application.user.port.out.UserManagementPort
import com.asap.domain.common.DomainId
Expand All @@ -15,9 +15,9 @@ class SpaceQueryService(
private val spaceManagementPort: SpaceManagementPort,
private val userManagementPort: UserManagementPort,
private val spaceLetterManagementPort: SpaceLetterManagementPort,
) : MainSpaceGetUsecase,
SpaceGetUsecase {
override fun get(query: MainSpaceGetUsecase.Query): MainSpaceGetUsecase.Response {
) : GetMainSpaceUsecase,
GetSpaceUsecase {
override fun get(query: GetMainSpaceUsecase.Query): GetMainSpaceUsecase.Response {
val mainSpace =
spaceManagementPort.getMainSpace(
userId = DomainId(query.userId),
Expand All @@ -27,24 +27,24 @@ class SpaceQueryService(
userId = DomainId(query.userId),
spaceId = mainSpace.id,
)
return MainSpaceGetUsecase.Response(
return GetMainSpaceUsecase.Response(
id = mainSpace.id.value,
username = userManagementPort.getUserNotNull(DomainId(query.userId)).username,
templateType = space.templateType,
spaceName = space.name,
)
}

override fun getAll(query: SpaceGetUsecase.GetAllQuery): SpaceGetUsecase.GetAllResponse {
override fun getAll(query: GetSpaceUsecase.GetAllQuery): GetSpaceUsecase.GetAllResponse {
val spaces =
spaceManagementPort.getAllIndexedSpace(
userId = DomainId(query.userId),
)

return SpaceGetUsecase.GetAllResponse(
return GetSpaceUsecase.GetAllResponse(
spaces =
spaces.map {
SpaceGetUsecase.SpaceDetail(
GetSpaceUsecase.SpaceDetail(
spaceName = it.name,
letterCount = spaceLetterManagementPort.countSpaceLetterBy(it.id, DomainId(query.userId)),
isMainSpace = it.isMain(),
Expand All @@ -55,13 +55,13 @@ class SpaceQueryService(
)
}

override fun get(query: SpaceGetUsecase.GetQuery): SpaceGetUsecase.GetResponse {
override fun get(query: GetSpaceUsecase.GetQuery): GetSpaceUsecase.GetResponse {
val space =
spaceManagementPort.getSpaceNotNull(
userId = DomainId(query.userId),
spaceId = DomainId(query.spaceId),
)
return SpaceGetUsecase.GetResponse(
return GetSpaceUsecase.GetResponse(
spaceName = space.name,
spaceId = space.id.value,
templateType = space.templateType,
Expand Down
Loading

0 comments on commit ebfed7d

Please sign in to comment.