add domain service, auth service

This commit is contained in:
dalbodeule
2024-06-05 23:15:29 +09:00
parent 3dd8fc69c1
commit d99606436d
18 changed files with 299 additions and 112 deletions

View File

@@ -1,8 +1,6 @@
package space.mori.dnsapi.controller
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import io.swagger.v3.oas.annotations.media.ArraySchema
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
@@ -10,61 +8,66 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.*
import space.mori.dnsapi.db.Domain
import space.mori.dnsapi.dto.ApiResponseDTO
import space.mori.dnsapi.dto.DeleteResponseWithId
import space.mori.dnsapi.dto.DomainRequestDTO
import space.mori.dnsapi.dto.DomainResponseDTO
import space.mori.dnsapi.filter.getCurrentUser
import space.mori.dnsapi.service.DomainService
import java.util.*
@RestController
@RequestMapping("/domain")
class DomainController {
@RequestMapping("/zones")
class DomainController(
@Autowired
private val domainService: DomainService? = null
@get:GetMapping
@get:Operation(summary = "Get all domains", tags = ["domain"])
@get:ApiResponse(responseCode = "200", description = "Returns all domains",
content = [Content(array = ArraySchema(schema = Schema(implementation = DomainResponseDTO::class)))])
val allDomains: List<DomainResponseDTO?>
get() = domainService!!.getAllDomains().map { it?.toDTO() }
private val domainService: DomainService
) {
@GetMapping
@Operation(summary = "Get all domains", tags = ["domain"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Returns all domains", useReturnTypeSchema = true),
ApiResponse(responseCode = "404", description = "Returns not found",
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))])
])
fun allDomains(): ApiResponseDTO<List<DomainResponseDTO?>> {
return ApiResponseDTO(result = domainService.getAllDomains().map { it.toDTO() })
}
@Operation(summary = "Get domain", tags = ["domain"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Returns domain",
content = [Content(schema = Schema(implementation = DomainResponseDTO::class))]),
ApiResponse(responseCode = "200", description = "Returns domain", useReturnTypeSchema = true),
ApiResponse(responseCode = "404", description = "Returns not found",
content = [Content(schema = Schema(implementation = Void::class))])
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))])
])
@GetMapping("/{cfid}")
fun getDomainByCfid(
@Parameter(description = "CFID", required = true)
@PathVariable cfid: String?
): Optional<DomainResponseDTO> {
return domainService!!.getDomainById(cfid!!).map { it.toDTO() }
): ApiResponseDTO<DomainResponseDTO> {
return ApiResponseDTO(result = domainService.getDomainById(cfid!!).toDTO())
}
@Operation(summary = "Create domain", tags = ["domain"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Created domain",
content = [Content(schema = Schema(implementation = DomainResponseDTO::class))]),
ApiResponse(responseCode = "200", description = "Created domain", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))])
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))])
])
@PostMapping
fun createDomain(@RequestBody domain: Domain?): DomainResponseDTO {
return domainService!!.createDomain(domain!!).toDTO()
fun createDomain(@RequestBody domain: DomainRequestDTO): ApiResponseDTO<DomainResponseDTO> {
return ApiResponseDTO(result = domainService.createDomain(domain).toDTO())
}
@Operation(summary = "Delete domain", tags = ["domain"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Deleted domain",
content = [Content(schema = Schema(implementation = Void::class))]),
ApiResponse(responseCode = "200", description = "Deleted domain", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))])
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))])
])
@DeleteMapping("/{cfid}")
fun deleteDomain(@PathVariable cfid: String?) {
domainService!!.deleteDomain(cfid!!)
@DeleteMapping("/{domain_id}")
fun deleteDomain(@PathVariable domain_id: String?): ApiResponseDTO<DeleteResponseWithId> {
domainService.deleteDomain(domain_id!!)
return ApiResponseDTO(result=DeleteResponseWithId(domain_id))
}
private fun Domain.toDTO() = DomainResponseDTO(id = cfid, name = name)

View File

@@ -1,21 +1,16 @@
package space.mori.dnsapi.controller
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.media.ArraySchema
import io.swagger.v3.oas.annotations.media.Content
import io.swagger.v3.oas.annotations.media.Schema
import io.swagger.v3.oas.annotations.responses.ApiResponse
import io.swagger.v3.oas.annotations.responses.ApiResponses
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.jpa.domain.AbstractPersistable_.id
import org.springframework.web.bind.annotation.*
import space.mori.dnsapi.db.Domain
import space.mori.dnsapi.dto.*
import space.mori.dnsapi.db.Record as DomainRecord
import space.mori.dnsapi.dto.RecordRequestDTO
import space.mori.dnsapi.dto.RecordResponseDTO
import space.mori.dnsapi.getISOFormat
import space.mori.dnsapi.service.RecordService
import java.util.*
@RestController
@RequestMapping("/zones")
@@ -26,61 +21,57 @@ class RecordController(
@GetMapping("{zone_id}/dns_records")
@Operation(summary = "Get all records", tags=["record"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Return All Records",
content = [Content(array = ArraySchema(schema = Schema(implementation = RecordResponseDTO::class)))]),
ApiResponse(responseCode = "200", description = "Return All Records", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))]),
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))]),
])
fun allRecords(@PathVariable zone_id: String): List<RecordResponseDTO> {
return recordService.getRecordsByDomain(zone_id)?.map{ it } ?: listOf()
fun allRecords(@PathVariable zone_id: String): ApiResponseDTO<List<RecordResponseDTO>> {
return ApiResponseDTO(result = recordService.getRecordsByDomain(zone_id)?.map{ it } ?: listOf())
}
@GetMapping("{zone_id}/dns_records/{dns_record_id}")
@Operation(summary = "Get Record by ID", tags=["record"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Return Record",
content = [Content(schema = Schema(implementation = RecordResponseDTO::class))]),
ApiResponse(responseCode = "200", description = "Return Record", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))])
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))]),
])
fun getRecordByCfid(@PathVariable zone_id: String, @PathVariable dns_record_id: String): RecordResponseDTO {
return recordService.getRecord(zone_id, dns_record_id)
fun getRecordByCfid(@PathVariable zone_id: String, @PathVariable dns_record_id: String): ApiResponseDTO<RecordResponseDTO> {
return ApiResponseDTO(result = recordService.getRecord(zone_id, dns_record_id))
}
@PostMapping("{zone_id}/dns_records")
@Operation(summary = "Add Record by ID", tags=["record"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Return Record",
content = [Content(schema = Schema(implementation = RecordResponseDTO::class))]),
ApiResponse(responseCode = "200", description = "Return Record", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))]),
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))]),
])
fun createRecord(@PathVariable zone_id: String, @RequestBody record: RecordRequestDTO): RecordResponseDTO {
return recordService.createRecord(zone_id, record)
fun createRecord(@PathVariable zone_id: String, @RequestBody record: RecordRequestDTO): ApiResponseDTO<RecordResponseDTO> {
return ApiResponseDTO(result = recordService.createRecord(zone_id, record))
}
@DeleteMapping("{zone_id}/dns_records/{dns_record_id}")
@Operation(summary = "Remove Record by ID", tags=["record"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Return Record",
content = [Content(schema = Schema(implementation = Void::class))]),
ApiResponse(responseCode = "200", description = "Return Record", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))]),
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))]),
])
fun deleteRecord(@PathVariable zone_id: String, @PathVariable dns_record_id: String) {
recordService.deleteRecord(zone_id, dns_record_id)
fun deleteRecord(@PathVariable zone_id: String, @PathVariable dns_record_id: String): ApiResponseDTO<DeleteResponseWithId> {
val record_id = recordService.deleteRecord(zone_id, dns_record_id)
return ApiResponseDTO(result = DeleteResponseWithId(record_id))
}
@PatchMapping("{zone_id}/dns_records/{dns_record_id}")
@Operation(summary = "Update Record by ID", tags=["record"])
@ApiResponses(value = [
ApiResponse(responseCode = "200", description = "Return Record",
content = [Content(schema = Schema(implementation = RecordResponseDTO::class))]),
ApiResponse(responseCode = "200", description = "Return Record", useReturnTypeSchema = true),
ApiResponse(responseCode = "400", description = "Bad request",
content = [Content(schema = Schema(implementation = Void::class))]),
content = [Content(schema = Schema(implementation = ApiResponseDTO::class))]),
])
fun updateRecord(@PathVariable zone_id: String, @PathVariable dns_record_id: String, @RequestBody record: RecordRequestDTO): RecordResponseDTO {
return recordService.updateRecord(zone_id, dns_record_id, record)
fun updateRecord(@PathVariable zone_id: String, @PathVariable dns_record_id: String, @RequestBody record: RecordRequestDTO): ApiResponseDTO<RecordResponseDTO> {
return ApiResponseDTO(result = recordService.updateRecord(zone_id, dns_record_id, record))
}
private fun DomainRecord.toDTO() = RecordResponseDTO(