From c3775fe7b2993b43da70e9a62fcf8ec185a51bb6 Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:27:42 +0900 Subject: [PATCH 01/10] =?UTF-8?q?[feat]=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=EC=97=90=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/InitialScriptService.kt | 7 +++++ .../service/impl/InitialScriptServiceImpl.kt | 27 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt create mode 100644 src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt new file mode 100644 index 00000000..bd58b5d3 --- /dev/null +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/InitialScriptService.kt @@ -0,0 +1,7 @@ +package com.dcd.server.core.domain.application.service + +import com.dcd.server.core.domain.application.model.Application + +interface InitialScriptService { + fun write(application: Application, initialScripts: List) +} \ No newline at end of file diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt new file mode 100644 index 00000000..a45c8f77 --- /dev/null +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt @@ -0,0 +1,27 @@ +package com.dcd.server.core.domain.application.service.impl + +import com.dcd.server.core.domain.application.model.Application +import com.dcd.server.core.domain.application.model.ApplicationInitialScript +import com.dcd.server.core.domain.application.service.InitialScriptService +import com.dcd.server.core.domain.application.spi.CommandApplicationInitialScriptPort +import org.springframework.stereotype.Service +import java.util.UUID + +@Service +class InitialScriptServiceImpl( + private val commandApplicationInitialScriptPort: CommandApplicationInitialScriptPort +) : InitialScriptService { + override fun write( + application: Application, + initialScripts: List, + ) { + val initialScriptList = initialScripts.map { script -> + ApplicationInitialScript( + id = UUID.randomUUID(), + script = script, + application = application, + ) + } + commandApplicationInitialScriptPort.saveAll(initialScriptList) + } +} \ No newline at end of file From 04ca68f4e2e5d4fd7e2393fdd92ce0be85c979e6 Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:28:12 +0900 Subject: [PATCH 02/10] =?UTF-8?q?[feat]=20CreateApplicationReqDto=EC=97=90?= =?UTF-8?q?=20initialScripts=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/application/dto/request/CreateApplicationReqDto.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt b/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt index 60de825d..0aa3b977 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/CreateApplicationReqDto.kt @@ -9,5 +9,6 @@ data class CreateApplicationReqDto( val applicationType: ApplicationType, val port: Int, val version: String, + val initialScripts: List, val labels: List ) \ No newline at end of file From e6359634c9d15f2f7e15f4f645b8e01e7fd3d67c Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:28:42 +0900 Subject: [PATCH 03/10] =?UTF-8?q?[feat]=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=83=9D=EC=84=B1=EC=8B=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=9E=91=EC=84=B1=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/CreateApplicationUseCase.kt | 4 ++- .../usecase/CreateApplicationUseCaseTest.kt | 31 +++++++++++++++++++ .../application/ApplicationWebAdapterTest.kt | 1 + src/test/resources/data.sql | 4 +-- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt b/src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt index 67a93a19..6d849b70 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCase.kt @@ -27,7 +27,8 @@ class CreateApplicationUseCase( private val buildDockerImageService: BuildDockerImageService, private val createContainerService: CreateContainerService, private val deleteApplicationDirectoryService: DeleteApplicationDirectoryService, - private val envAutoMatchService: EnvAutoMatchService + private val envAutoMatchService: EnvAutoMatchService, + private val initialScriptService: InitialScriptService ) : CoroutineScope by CoroutineScope(Dispatchers.IO) { fun execute(createApplicationReqDto: CreateApplicationReqDto): CreateApplicationResDto { val workspace = workspaceInfo.workspace @@ -44,6 +45,7 @@ class CreateApplicationUseCase( val version = application.version envAutoMatchService.match(workspace, application) + initialScriptService.write(application, createApplicationReqDto.initialScripts) launch { val applicationType = application.applicationType diff --git a/src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt b/src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt index 6ec64153..a0f05c7e 100644 --- a/src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt +++ b/src/test/kotlin/com/dcd/server/core/domain/application/usecase/CreateApplicationUseCaseTest.kt @@ -5,6 +5,7 @@ import com.dcd.server.core.domain.application.dto.request.CreateApplicationReqDt import com.dcd.server.core.domain.application.exception.AlreadyExistsApplicationException import com.dcd.server.core.domain.application.model.enums.ApplicationType import com.dcd.server.core.domain.application.spi.CommandApplicationPort +import com.dcd.server.core.domain.application.spi.QueryApplicationInitialScriptPort import com.dcd.server.core.domain.application.spi.QueryApplicationPort import com.dcd.server.core.domain.env.model.ApplicationEnv import com.dcd.server.core.domain.env.model.ApplicationEnvDetail @@ -19,6 +20,7 @@ import io.kotest.core.spec.style.BehaviorSpec import util.workspace.WorkspaceGenerator import io.kotest.assertions.throwables.shouldThrow import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe import kotlinx.coroutines.cancel import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles @@ -33,6 +35,7 @@ class CreateApplicationUseCaseTest( private val queryUserPort: QueryUserPort, private val commandWorkspacePort: CommandWorkspacePort, private val queryApplicationPort: QueryApplicationPort, + private val queryApplicationInitialScriptPort: QueryApplicationInitialScriptPort, private val queryWorkspacePort: QueryWorkspacePort, private val commandApplicationPort: CommandApplicationPort, private val commandApplicationEnvPort: CommandApplicationEnvPort, @@ -56,6 +59,7 @@ class CreateApplicationUseCaseTest( githubUrl = "testGithub", version = "17", port = 8080, + initialScripts = listOf(), labels = listOf() ) @@ -82,6 +86,7 @@ class CreateApplicationUseCaseTest( githubUrl = "testGithub", version = "17", port = 8080, + initialScripts = listOf(), labels = listOf() ) @@ -104,6 +109,7 @@ class CreateApplicationUseCaseTest( githubUrl = "testGithub", version = "17", port = 8080, + initialScripts = listOf(), labels = listOf() ) @@ -142,6 +148,7 @@ class CreateApplicationUseCaseTest( githubUrl = "testGithub", version = "17", port = 8080, + initialScripts = listOf(), labels = listOf("testLabel") ) @@ -164,4 +171,28 @@ class CreateApplicationUseCaseTest( } } } + + given("초기화 스크립트 내용을 가진 애플리케이션 생성 정보가 주어지고") { + val request = CreateApplicationReqDto( + name = "testCreateApplication", + description = "testDescription", + applicationType = ApplicationType.SPRING_BOOT, + githubUrl = "testGithub", + version = "17", + port = 8080, + initialScripts = listOf("echo test"), + labels = listOf() + ) + + `when`("usecase를 실행하면") { + val applicationId = createApplicationUseCase.execute(request).applicationId + + then("생성된 애플리케이션에 초기화 스크립트가 존재해야함") { + val application = queryApplicationPort.findById(applicationId).also { it shouldNotBe null }!! + val initialScript = queryApplicationInitialScriptPort.findAllByApplication(application) + initialScript.size shouldBe 1 + initialScript[0].script shouldBe request.initialScripts.first() + } + } + } }) \ No newline at end of file diff --git a/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt b/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt index 8daefd96..5ee9cf08 100644 --- a/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt +++ b/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt @@ -39,6 +39,7 @@ class ApplicationWebAdapterTest : BehaviorSpec({ applicationType = ApplicationType.SPRING_BOOT, githubUrl = "testUrl", port = 8080, + initialScripts = emptyList(), version = "17", ) diff --git a/src/test/resources/data.sql b/src/test/resources/data.sql index 8503e0aa..67c3a8e7 100644 --- a/src/test/resources/data.sql +++ b/src/test/resources/data.sql @@ -36,8 +36,8 @@ alter table if exists application_env_matcher_entity add constraint FKqfkw6tgy65 alter table if exists application_env_entity add constraint FKm22cqdjjl434jyqenpa4nf78p foreign key (workspace_id) references workspace_entity (id); alter table if exists application_env_label_entity add constraint FKgd5b8upn11w2uh6voe20dm6df foreign key (application_env_id) references application_env_entity (id); alter table if exists application_entity add constraint FKn9drxkrx2h6wlorxfy00mr45h foreign key (workspace_id) references workspace_entity; -alter table if exists application_label_entity add constraint FKq6iovxq5tdx2i1lwrx34kg0b9 foreign key (application_id) references application_entity; -alter table if exists application_initial_script_entity add constraint FKq6iovxq5tdx2i1lwrx34kg0b0 foreign key (application_id) references application_entity; +alter table if exists application_label_entity add constraint FKq6iovxq5tdx2i1lwrx34kg0b9 foreign key (application_id) references application_entity (id); +alter table if exists application_initial_script_entity add constraint FKq6iovxq5tdx2i1lwrx34kg0b0 foreign key (application_id) references application_entity (id); alter table if exists role_entity add constraint FKrot6fehcor0f3sux5s6kgl0a4 foreign key (user_id) references user_entity; alter table if exists workspace_entity add constraint FKlfxk1bhw5knckt8vv28xvx5g2 foreign key (owner_id) references user_entity; alter table if exists domain_entity add constraint FKh7b0t3y0a7x5boh75j8lanww6 foreign key (application_id) references application_entity; From e2dfe933fbd9476131f1f74aac70cc599792ce66 Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:28:56 +0900 Subject: [PATCH 04/10] =?UTF-8?q?[feat]=20CreateApplicationRequest?= =?UTF-8?q?=EC=97=90=20initialScripts=20=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/exetension/ApplicationRequestDataExtension.kt | 1 + .../domain/application/data/request/CreateApplicationRequest.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt index 17065839..499a88af 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt @@ -19,6 +19,7 @@ fun CreateApplicationRequest.toDto(): CreateApplicationReqDto = applicationType = this.applicationType, port = this.port, version = this.version, + initialScripts = this.initialScripts, labels = this.labels ) diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt index e234f00f..60ee8347 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt @@ -13,5 +13,6 @@ data class CreateApplicationRequest( val applicationType: ApplicationType, val port: Int, val version: String, + val initialScripts: List, val labels: List = listOf() ) \ No newline at end of file From bfcb6e0ed63bdec77c357af7f3ebfc5c607659ed Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:41:08 +0900 Subject: [PATCH 05/10] =?UTF-8?q?[refac]=20=EC=B4=88=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=9E=91=EC=84=B1?= =?UTF-8?q?=EC=8B=9C=20=EA=B8=B0=EC=A1=B4=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=EA=B3=BC=20=EC=97=B0=EA=B2=B0?= =?UTF-8?q?=EB=90=98=EC=96=B4=EC=9E=88=EB=8D=98=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=EB=8A=94=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=A6=AC?= =?UTF-8?q?=ED=8E=99=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/application/service/impl/InitialScriptServiceImpl.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt index a45c8f77..34082fe2 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/service/impl/InitialScriptServiceImpl.kt @@ -15,6 +15,8 @@ class InitialScriptServiceImpl( application: Application, initialScripts: List, ) { + commandApplicationInitialScriptPort.deleteByApplication(application) + val initialScriptList = initialScripts.map { script -> ApplicationInitialScript( id = UUID.randomUUID(), From 3a4655950fb484fe5b96acff406c85e8d9a69db6 Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:41:53 +0900 Subject: [PATCH 06/10] =?UTF-8?q?[feat]=20UpdateApplicationReqDto=EC=97=90?= =?UTF-8?q?=20initialScripts=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/dto/request/UpdateApplicationReqDto.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt b/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt index 1ba347f3..702d5c31 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/dto/request/UpdateApplicationReqDto.kt @@ -5,8 +5,9 @@ import com.dcd.server.core.domain.application.model.enums.ApplicationType data class UpdateApplicationReqDto( val name: String, val description: String?, - val applicationType: ApplicationType, val githubUrl: String?, + val applicationType: ApplicationType, + val port: Int, val version: String, - val port: Int + val initialScripts: List, ) From 958f857497e3fb0bdc64aec89f51c8cb35960ef4 Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:42:19 +0900 Subject: [PATCH 07/10] =?UTF-8?q?[feat]=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=88=98=EC=A0=95=EC=8B=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EB=B0=98=EC=98=81=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/application/usecase/UpdateApplicationUseCase.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt b/src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt index 437489ef..d4aa17f5 100644 --- a/src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt +++ b/src/main/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCase.kt @@ -9,6 +9,7 @@ import com.dcd.server.core.domain.application.exception.ApplicationNotFoundExcep import com.dcd.server.core.domain.application.model.enums.ApplicationStatus import com.dcd.server.core.domain.application.service.DeleteContainerService import com.dcd.server.core.domain.application.service.DeleteImageService +import com.dcd.server.core.domain.application.service.InitialScriptService import com.dcd.server.core.domain.application.spi.CommandApplicationPort import com.dcd.server.core.domain.application.spi.QueryApplicationPort import kotlinx.coroutines.CoroutineScope @@ -22,7 +23,8 @@ class UpdateApplicationUseCase( private val commandApplicationPort: CommandApplicationPort, private val deleteContainerService: DeleteContainerService, private val deleteImageService: DeleteImageService, - private val eventPublisher: ApplicationEventPublisher + private val eventPublisher: ApplicationEventPublisher, + private val initialScriptService: InitialScriptService ) : CoroutineScope by CoroutineScope(Dispatchers.IO) { @Lock("#id") fun execute(id: String, updateApplicationReqDto: UpdateApplicationReqDto) { @@ -50,5 +52,7 @@ class UpdateApplicationUseCase( port = updateApplicationReqDto.port ) commandApplicationPort.save(updatedApplication) + + initialScriptService.write(updatedApplication, updateApplicationReqDto.initialScripts) } } \ No newline at end of file From 0c7f62652ebea1554076b76adf2730bd95cb035d Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:42:30 +0900 Subject: [PATCH 08/10] =?UTF-8?q?[feat]=20UpdateApplicationRequest?= =?UTF-8?q?=EC=97=90=20initialScripts=20=ED=95=84=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/exetension/ApplicationRequestDataExtension.kt | 3 ++- .../application/data/request/UpdateApplicationRequest.kt | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt index 499a88af..6b104b19 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/exetension/ApplicationRequestDataExtension.kt @@ -30,7 +30,8 @@ fun UpdateApplicationRequest.toDto(): UpdateApplicationReqDto = applicationType = this.applicationType, githubUrl = this.githubUrl, version = this.version, - port = this.port + port = this.port, + initialScripts = this.initialScripts, ) fun ExecuteCommandRequest.toDto(): ExecuteCommandReqDto = diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt index 1a54bd77..88f2176a 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt @@ -9,8 +9,9 @@ data class UpdateApplicationRequest( @field:Pattern(regexp = "^[a-zA-Z0-9 ]{1,26}$") val name: String, val description: String?, - val applicationType: ApplicationType, val githubUrl: String?, + val applicationType: ApplicationType, + val port: Int, val version: String, - val port: Int + val initialScripts: List, ) From 922e42d3f5f28f3906296c54d3eae5ff711d53ba Mon Sep 17 00:00:00 2001 From: dolong2 Date: Thu, 6 Nov 2025 17:49:28 +0900 Subject: [PATCH 09/10] =?UTF-8?q?[feat]=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=88=98=EC=A0=95=EC=8B=9C=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=EA=B4=80=EB=A0=A8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/UpdateApplicationUseCaseTest.kt | 12 +++++++++++- .../domain/application/ApplicationWebAdapterTest.kt | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt b/src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt index 7c7d259d..0f9e7cdf 100644 --- a/src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt +++ b/src/test/kotlin/com/dcd/server/core/domain/application/usecase/UpdateApplicationUseCaseTest.kt @@ -7,12 +7,14 @@ import com.dcd.server.core.domain.application.exception.ApplicationNotFoundExcep import com.dcd.server.core.domain.application.model.enums.ApplicationStatus import com.dcd.server.core.domain.application.model.enums.ApplicationType import com.dcd.server.core.domain.application.spi.CommandApplicationPort +import com.dcd.server.core.domain.application.spi.QueryApplicationInitialScriptPort import com.dcd.server.core.domain.application.spi.QueryApplicationPort import com.dcd.server.core.domain.user.spi.QueryUserPort import com.dcd.server.core.domain.workspace.spi.QueryWorkspacePort import com.ninjasquad.springmockk.MockkBean import io.kotest.assertions.throwables.shouldThrow import io.kotest.core.spec.style.BehaviorSpec +import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe import io.mockk.coVerify @@ -29,13 +31,14 @@ class UpdateApplicationUseCaseTest( private val queryUserPort: QueryUserPort, private val queryWorkspacePort: QueryWorkspacePort, private val queryApplicationPort: QueryApplicationPort, + private val queryApplicationInitialScriptPort: QueryApplicationInitialScriptPort, private val commandApplicationPort: CommandApplicationPort, @MockkBean(relaxed = true) private val commandPort: CommandPort ) : BehaviorSpec({ val targetUserId = "923a6407-a5f8-4e1e-bffd-0621910ddfc8" - val updateReqDto = UpdateApplicationReqDto(name = "updated application", description = "dldl", applicationType = ApplicationType.SPRING_BOOT, githubUrl = null, version = "11", port = 8080) + val updateReqDto = UpdateApplicationReqDto(name = "updated application", description = "dldl", applicationType = ApplicationType.SPRING_BOOT, githubUrl = null, version = "11", port = 8080, initialScripts = listOf("echo test")) given("애플리케이션 아이디가 주어지고") { val targetUser = queryUserPort.findById(targetUserId)!! @@ -59,6 +62,13 @@ class UpdateApplicationUseCaseTest( coVerify { commandPort.executeShellCommand("docker rm ${targetApplication.containerName}") } coVerify { commandPort.executeShellCommand("docker rmi ${targetApplication.containerName}") } } + + then("변경된 초기화 스크립트를 가지고 있어야함") { + val result = queryApplicationPort.findById(applicationId).also { it shouldNotBe null }!! + val initialScripts = queryApplicationInitialScriptPort.findAllByApplication(result) + initialScripts shouldHaveSize 1 + initialScripts[0].script shouldBe updateReqDto.initialScripts.first() + } } `when`("애플리케이션이 실행중이라면") { diff --git a/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt b/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt index 5ee9cf08..8684cace 100644 --- a/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt +++ b/src/test/kotlin/com/dcd/server/presentation/domain/application/ApplicationWebAdapterTest.kt @@ -158,7 +158,7 @@ class ApplicationWebAdapterTest : BehaviorSpec({ given("UpdateRequest가 주어지고") { val testId ="testId" - val request = UpdateApplicationRequest(name = "update", description = null, applicationType = ApplicationType.SPRING_BOOT, githubUrl = null, version = "11", port = 8080) + val request = UpdateApplicationRequest(name = "update", description = null, applicationType = ApplicationType.SPRING_BOOT, githubUrl = null, version = "11", port = 8080, initialScripts = emptyList()) `when`("updateApplication 메서드를 실행할때") { val result = applicationWebAdapter.updateApplication(testWorkspaceId, testId, request) From f44b815c56ff3003d833a7cf3aa5f877e2ecbf6d Mon Sep 17 00:00:00 2001 From: dolong2 Date: Fri, 7 Nov 2025 14:19:08 +0900 Subject: [PATCH 10/10] =?UTF-8?q?[feat]=20=EC=95=A0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=85=98=20=EC=83=9D=EC=84=B1=EB=B0=8F=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=8B=9C=20initialScripts=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=EC=97=90=20=EA=B8=B0=EB=B3=B8=EA=B0=92=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/application/data/request/CreateApplicationRequest.kt | 2 +- .../domain/application/data/request/UpdateApplicationRequest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt index 60ee8347..8bd857de 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/CreateApplicationRequest.kt @@ -13,6 +13,6 @@ data class CreateApplicationRequest( val applicationType: ApplicationType, val port: Int, val version: String, - val initialScripts: List, + val initialScripts: List = listOf(), val labels: List = listOf() ) \ No newline at end of file diff --git a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt index 88f2176a..030cf382 100644 --- a/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt +++ b/src/main/kotlin/com/dcd/server/presentation/domain/application/data/request/UpdateApplicationRequest.kt @@ -13,5 +13,5 @@ data class UpdateApplicationRequest( val applicationType: ApplicationType, val port: Int, val version: String, - val initialScripts: List, + val initialScripts: List = listOf(), )