Skip to content

Commit

Permalink
Merge branch '배포-api-구현'
Browse files Browse the repository at this point in the history
  • Loading branch information
HyunSu1768 committed Feb 14, 2024
2 parents 07a70eb + 1252c71 commit b323acd
Show file tree
Hide file tree
Showing 9 changed files with 206 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.example.mergebackend.domain.deploy.entity

import com.example.mergebackend.domain.deploy.entity.type.ServiceType
import com.example.mergebackend.domain.deploy.entity.vo.DeployStatus
import com.example.mergebackend.domain.deploy.entity.vo.UseDatabase
import com.example.mergebackend.domain.project.entity.Project
import java.util.UUID
import javax.persistence.*

@Entity(name = "deploy")
class Deploy(
id: UUID? = null,
project: Project,
accessKey: String,
serviceType: ServiceType,
organization: String,
useDatabase: UseDatabase,
isApproved: Boolean,
deployStatus: DeployStatus,
containerName: String
) {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", columnDefinition = "BINARY(16)")
var id: UUID? = id
protected set

@ManyToOne(fetch = FetchType.LAZY)
var project: Project = project
protected set

@Column(name = "access_key", nullable = false)
var accessKey: String = accessKey
protected set

@Enumerated(EnumType.STRING)
var serviceType: ServiceType = serviceType
protected set

@Column(name = "organization", nullable = false)
var organization: String = organization
protected set

@ElementCollection
var useDatabase: UseDatabase = useDatabase
protected set

@Column(name = "is_approved", nullable = false)
var isApproved: Boolean = isApproved
protected set

@Enumerated(EnumType.STRING)
var deployStatus: DeployStatus = deployStatus
protected set

@Column(name = "container_name", nullable = false)
var contianerNmae: String = containerName
protected set
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.mergebackend.domain.deploy.entity.vo

enum class DeployStatus {
PENDING_APPROVE,
APPROVED,
CONTAINER_PENDING,
CONTAINER_RUNNING,
CONTAINER_CRASHLOOPBACKOFF,
CONTAINER_EVICT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.mergebackend.domain.deploy.entity.vo

import javax.persistence.Embeddable

@Embeddable
data class UseDatabase(
var mysql: Boolean,
var redis: Boolean
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.mergebackend.domain.deploy.presentation

import com.example.mergebackend.domain.deploy.presentation.dto.request.CreateDeployRequest
import com.example.mergebackend.domain.deploy.service.DeployService
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RequestMapping("/deploy")
@RestController
class DeployController(
private val deployService: DeployService
) {
@PostMapping
fun createDeploy(
@RequestBody
createDeployRequest: CreateDeployRequest
) {
deployService.createDeploy(createDeployRequest)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.mergebackend.domain.deploy.presentation.dto.request

import com.example.mergebackend.domain.deploy.entity.type.ServiceType
import com.example.mergebackend.domain.deploy.entity.vo.UseDatabase
import java.util.UUID

data class CreateDeployRequest(
val containerName: String,
val projectId: UUID,
val serviceType: ServiceType,
val useDatabase: UseDatabase
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.mergebackend.domain.deploy.presentation.dto.request

data class WebhookRequest(
val test: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.example.mergebackend.domain.deploy.repository

import com.example.mergebackend.domain.deploy.entity.Deploy
import org.springframework.data.jpa.repository.JpaRepository
import java.util.UUID

interface DeployRepository : JpaRepository<Deploy, UUID>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.example.mergebackend.domain.deploy.service

import com.example.mergebackend.domain.deploy.presentation.dto.request.CreateDeployRequest
import com.example.mergebackend.domain.deploy.presentation.dto.request.WebhookRequest
import java.util.UUID

interface DeployService {
fun createDeploy(createDeployRequest: CreateDeployRequest)
fun regenerateAccessKey(deployId: UUID)
fun getClub(deployId: UUID)
fun verifyAndGetRole(projectName: String, repository: String, accessKey: String, projectType: String)
fun deployApprove(deployId: UUID)
fun containerRestartWebhook(webhookRequest: WebhookRequest)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package com.example.mergebackend.domain.deploy.service

import com.example.mergebackend.domain.deploy.entity.Deploy
import com.example.mergebackend.domain.deploy.entity.vo.DeployStatus
import com.example.mergebackend.domain.deploy.presentation.dto.request.CreateDeployRequest
import com.example.mergebackend.domain.deploy.presentation.dto.request.WebhookRequest
import com.example.mergebackend.domain.deploy.repository.DeployRepository
import com.example.mergebackend.domain.project.exception.ProjectNotFoundException
import com.example.mergebackend.domain.project.repository.ProjectRepository
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
import java.util.*

@Service
private class DeployServiceImpl(
private val deployRepository: DeployRepository,
private val projectRepository: ProjectRepository
): DeployService {
override fun createDeploy(createDeployRequest: CreateDeployRequest) {
val project = projectRepository.findByIdOrNull(createDeployRequest.projectId) ?: throw ProjectNotFoundException

val organization = extractOrganization(project.githubUrl!!)
deployRepository.save(
createDeployRequest.run {
Deploy(
project = project,
accessKey = "",
serviceType = serviceType,
organization = organization,
useDatabase = useDatabase,
isApproved = false,
deployStatus = DeployStatus.PENDING_APPROVE,
containerName = containerName
)
}
)
}

override fun regenerateAccessKey(deployId: UUID) {
TODO("Not yet implemented")
}

override fun getClub(deployId: UUID) {
TODO("Not yet implemented")
}

override fun verifyAndGetRole(projectName: String, repository: String, accessKey: String, projectType: String) {
TODO("Not yet implemented")
}

override fun deployApprove(deployId: UUID) {
TODO("Not yet implemented")
}

override fun containerRestartWebhook(webhookRequest: WebhookRequest) {
TODO("Not yet implemented")
}

private fun extractOrganization(githubUrl: String): String {
val parts = githubUrl.split("/")
return if (parts.size >= 4) {
parts[3]
} else {
""
}
}
}

0 comments on commit b323acd

Please sign in to comment.