From e25d800cee67fe0189afefc0ce4596d62d1069b2 Mon Sep 17 00:00:00 2001 From: HyunSu1768 Date: Tue, 7 May 2024 23:20:11 +0900 Subject: [PATCH] =?UTF-8?q?feat=20::=20=EC=97=AC=EB=9F=AC=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../container/adapter/ContainerWebAdapter.kt | 16 ++++--- .../dto/response/SimpleContainerResponse.kt | 14 ++++++ .../port/in/GetContainerByDeployIdUseCase.kt | 8 ++++ .../application/port/out/FindContainerPort.kt | 1 + .../ContainerPersistenceAdapter.kt | 1 + .../repository/ContainerRepository.kt | 2 + .../service/GetContainerByDeployIdService.kt | 45 +++++++++++++++++++ ...erService.kt => GetContainerLogService.kt} | 3 +- .../port/in/CreateDeployUseCase.kt | 2 +- .../service/CreateDeployService.kt | 5 ++- 10 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/dto/response/SimpleContainerResponse.kt create mode 100644 src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/in/GetContainerByDeployIdUseCase.kt create mode 100644 src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerByDeployIdService.kt rename src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/{GetContainerService.kt => GetContainerLogService.kt} (96%) diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/ContainerWebAdapter.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/ContainerWebAdapter.kt index 8fd5762..44ef25e 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/ContainerWebAdapter.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/ContainerWebAdapter.kt @@ -9,11 +9,10 @@ import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController import xquare.app.xquareinfra.domain.container.adapter.dto.request.SyncContainerRequest import xquare.app.xquareinfra.domain.container.adapter.dto.response.GetContainerLogResponse -import xquare.app.xquareinfra.domain.container.application.port.`in`.GetContainerLogUseCase -import xquare.app.xquareinfra.domain.container.application.port.`in`.GetEnvironmentVariableUseCase -import xquare.app.xquareinfra.domain.container.application.port.`in`.SyncContainerUseCase -import xquare.app.xquareinfra.domain.container.application.port.`in`.UpdateEnvironmentVariableUseCase +import xquare.app.xquareinfra.domain.container.adapter.dto.response.SimpleContainerResponse +import xquare.app.xquareinfra.domain.container.application.port.`in`.* import xquare.app.xquareinfra.domain.container.domain.ContainerEnvironment +import java.util.UUID @RequestMapping("/container") @RestController @@ -21,7 +20,8 @@ class ContainerWebAdapter( private val syncContainerUseCase: SyncContainerUseCase, private val getEnvironmentVariableUseCase: GetEnvironmentVariableUseCase, private val updateEnvironmentVariableUseCase: UpdateEnvironmentVariableUseCase, - private val getContainerLogUseCase: GetContainerLogUseCase + private val getContainerLogUseCase: GetContainerLogUseCase, + private val getContainerByDeployIdUseCase: GetContainerByDeployIdUseCase ) { @PostMapping("/sync") fun syncContainer( @@ -64,4 +64,10 @@ class ContainerWebAdapter( ): GetContainerLogResponse { return getContainerLogUseCase.getContainerLog(deployName, environment) } + + @GetMapping + fun getContainerByDeployId( + @RequestParam("deployId") + deployId: UUID + ): List = getContainerByDeployIdUseCase.getContainerByDeploy(deployId) } \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/dto/response/SimpleContainerResponse.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/dto/response/SimpleContainerResponse.kt new file mode 100644 index 0000000..0520b3f --- /dev/null +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/adapter/dto/response/SimpleContainerResponse.kt @@ -0,0 +1,14 @@ +package xquare.app.xquareinfra.domain.container.adapter.dto.response + +import xquare.app.xquareinfra.domain.container.domain.ContainerEnvironment +import xquare.app.xquareinfra.domain.container.domain.ContainerStatus +import java.time.LocalDateTime + +data class SimpleContainerResponse( + val containerName: String, + val containerEnvironment: ContainerEnvironment, + val containerStatus: ContainerStatus, + val repository: String, + val domain: String, + val lastDeploy: LocalDateTime +) diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/in/GetContainerByDeployIdUseCase.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/in/GetContainerByDeployIdUseCase.kt new file mode 100644 index 0000000..daa1a17 --- /dev/null +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/in/GetContainerByDeployIdUseCase.kt @@ -0,0 +1,8 @@ +package xquare.app.xquareinfra.domain.container.application.port.`in` + +import xquare.app.xquareinfra.domain.container.adapter.dto.response.SimpleContainerResponse +import java.util.UUID + +interface GetContainerByDeployIdUseCase { + fun getContainerByDeploy(deployId: UUID): List +} \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/FindContainerPort.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/FindContainerPort.kt index 3a6d76d..1032a25 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/FindContainerPort.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/FindContainerPort.kt @@ -6,4 +6,5 @@ import xquare.app.xquareinfra.domain.deploy.domain.Deploy interface FindContainerPort { fun findByDeployAndEnvironment(deploy: Deploy, containerEnvironment: ContainerEnvironment): Container? + fun findAllByDeploy(deploy: Deploy): List } \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/ContainerPersistenceAdapter.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/ContainerPersistenceAdapter.kt index 73e3ff8..d0be99b 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/ContainerPersistenceAdapter.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/ContainerPersistenceAdapter.kt @@ -15,6 +15,7 @@ class ContainerPersistenceAdapter( override fun findByDeployAndEnvironment(deploy: Deploy, containerEnvironment: ContainerEnvironment): Container? = containerRepository.findByContainerEnvironmentAndDeploy(containerEnvironment, deploy) + override fun findAllByDeploy(deploy: Deploy): List = containerRepository.findAllByDeploy(deploy) override fun save(container: Container): Container = containerRepository.save(container) } \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/repository/ContainerRepository.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/repository/ContainerRepository.kt index c7bcf5d..e0997bc 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/repository/ContainerRepository.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/port/out/persistence/repository/ContainerRepository.kt @@ -8,4 +8,6 @@ import java.util.UUID interface ContainerRepository : JpaRepository { fun findByContainerEnvironmentAndDeploy(containerEnvironment: ContainerEnvironment, deploy: Deploy): Container? + + fun findAllByDeploy(deploy: Deploy): List } \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerByDeployIdService.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerByDeployIdService.kt new file mode 100644 index 0000000..9abcae8 --- /dev/null +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerByDeployIdService.kt @@ -0,0 +1,45 @@ +package xquare.app.xquareinfra.domain.container.application.service + +import org.springframework.stereotype.Service +import xquare.app.xquareinfra.domain.container.adapter.dto.response.SimpleContainerResponse +import xquare.app.xquareinfra.domain.container.application.port.`in`.GetContainerByDeployIdUseCase +import xquare.app.xquareinfra.domain.container.application.port.out.FindContainerPort +import xquare.app.xquareinfra.domain.container.domain.Container +import xquare.app.xquareinfra.domain.container.domain.ContainerEnvironment +import xquare.app.xquareinfra.domain.container.domain.ContainerStatus +import xquare.app.xquareinfra.domain.deploy.application.port.out.FindDeployPort +import xquare.app.xquareinfra.infrastructure.exception.BusinessLogicException +import java.util.* + +@Service +class GetContainerByDeployIdService( + private val findDeployPort: FindDeployPort, + private val findContainerPort: FindContainerPort +): GetContainerByDeployIdUseCase { + override fun getContainerByDeploy(deployId: UUID): List { + val deploy = findDeployPort.findById(deployId) ?: throw BusinessLogicException.DEPLOY_NOT_FOUND + val containers = findContainerPort.findAllByDeploy(deploy) + + return containers.map { + SimpleContainerResponse( + containerName = deploy.deployName, + containerEnvironment = it.containerEnvironment, + containerStatus = ContainerStatus.RUNNING, + repository = "${deploy.organization}/${deploy.repository}", + domain = generateDomain(it), + lastDeploy = it.lastDeploy + ) + } + } + + private fun generateDomain(container: Container): String { + if(container.subDomain!!.isEmpty()) { + val baseDomain = when (container.containerEnvironment) { + ContainerEnvironment.prod -> "prod-server.xquare.app" + else -> "stag-server.xquare.app" + } + return "https://$baseDomain/${container.deploy.deployName}" + } + return container.subDomain!! + } +} \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerService.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerLogService.kt similarity index 96% rename from src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerService.kt rename to src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerLogService.kt index 7b7148d..3e40003 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerService.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/container/application/service/GetContainerLogService.kt @@ -1,6 +1,5 @@ package xquare.app.xquareinfra.domain.container.application.service -import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import xquare.app.xquareinfra.domain.container.adapter.dto.response.GetContainerLogResponse @@ -17,7 +16,7 @@ import java.time.Instant @Transactional(readOnly = true) @Service -class GetContainerService( +class GetContainerLogService( private val findContainerPort: FindContainerPort, private val findDeployPort: FindDeployPort, private val logClient: LogClient diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/port/in/CreateDeployUseCase.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/port/in/CreateDeployUseCase.kt index 7dc7363..ca94eaa 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/port/in/CreateDeployUseCase.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/port/in/CreateDeployUseCase.kt @@ -4,5 +4,5 @@ import xquare.app.xquareinfra.domain.deploy.adapter.dto.request.CreateDeployRequ import java.util.UUID interface CreateDeployUseCase { - fun createDeploy(teamId: UUID, createDeployRequest: CreateDeployRequest) + fun createDeploy(teamId: UUID, createDeployRequest: CreateDeployRequest): UUID } \ No newline at end of file diff --git a/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/service/CreateDeployService.kt b/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/service/CreateDeployService.kt index 7ee2884..60896aa 100644 --- a/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/service/CreateDeployService.kt +++ b/src/main/kotlin/xquare/app/xquareinfra/domain/deploy/application/service/CreateDeployService.kt @@ -24,7 +24,7 @@ class CreateDeployService( private val deployClient: DeployClient, private val readCurrentUserPort: ReadCurrentUserPort ): CreateDeployUseCase { - override fun createDeploy(teamId: UUID, req: CreateDeployRequest) { + override fun createDeploy(teamId: UUID, req: CreateDeployRequest): UUID { val team = findTeamPort.findById(teamId) ?: throw BusinessLogicException.TEAM_NOT_FOUND val user = readCurrentUserPort.readCurrentUser() @@ -50,7 +50,7 @@ class CreateDeployService( throw BusinessLogicException.CREATE_DEPLOY_BAD_REQUEST } - req.run { + val deploy = req.run { saveDeployPort.saveDeploy( Deploy( id = null, @@ -68,5 +68,6 @@ class CreateDeployService( ) ) } + return deploy.id!! } } \ No newline at end of file