CodeController.kt
package delta.codecharacter.server.code
import delta.codecharacter.core.CodeApi
import delta.codecharacter.dtos.CodeDto
import delta.codecharacter.dtos.CodeRevisionDto
import delta.codecharacter.dtos.CreateCodeRevisionRequestDto
import delta.codecharacter.dtos.UpdateLatestCodeRequestDto
import delta.codecharacter.server.code.code_revision.CodeRevisionService
import delta.codecharacter.server.code.latest_code.LatestCodeService
import delta.codecharacter.server.code.locked_code.LockedCodeService
import delta.codecharacter.server.user.UserEntity
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
import org.springframework.security.access.annotation.Secured
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.web.bind.annotation.RestController
@RestController
class CodeController(
@Autowired private val codeRevisionService: CodeRevisionService,
@Autowired private val latestCodeService: LatestCodeService,
@Autowired private val lockedCodeService: LockedCodeService
) : CodeApi {
@Secured(value = ["ROLE_USER"])
override fun createCodeRevision(
createCodeRevisionRequestDto: CreateCodeRevisionRequestDto
): ResponseEntity<Unit> {
val user = SecurityContextHolder.getContext().authentication.principal as UserEntity
codeRevisionService.createCodeRevision(user.id, createCodeRevisionRequestDto)
return ResponseEntity.ok().build()
}
@Secured(value = ["ROLE_USER"])
override fun getCodeRevisions(): ResponseEntity<List<CodeRevisionDto>> {
val user = SecurityContextHolder.getContext().authentication.principal as UserEntity
return ResponseEntity.ok(codeRevisionService.getCodeRevisions(user.id))
}
@Secured(value = ["ROLE_USER"])
override fun getLatestCode(): ResponseEntity<CodeDto> {
val user = SecurityContextHolder.getContext().authentication.principal as UserEntity
return ResponseEntity.ok(latestCodeService.getLatestCode(user.id))
}
@Secured(value = ["ROLE_USER"])
override fun updateLatestCode(
updateLatestCodeRequestDto: UpdateLatestCodeRequestDto
): ResponseEntity<Unit> {
val user = SecurityContextHolder.getContext().authentication.principal as UserEntity
latestCodeService.updateLatestCode(user.id, updateLatestCodeRequestDto)
if (updateLatestCodeRequestDto.lock == true) {
lockedCodeService.updateLockedCode(user.id, updateLatestCodeRequestDto)
}
return ResponseEntity.ok().build()
}
}