59 lines
1.7 KiB
Kotlin
59 lines
1.7 KiB
Kotlin
package com.project.movienight.adapters.web
|
|
|
|
import com.project.movienight.application.ports.input.CreateFilmCommand
|
|
import com.project.movienight.application.ports.input.CreateFilmUseCase
|
|
import com.project.movienight.application.ports.input.DeleteFilmUseCase
|
|
import com.project.movienight.application.ports.input.EditFilmCommand
|
|
import com.project.movienight.application.ports.input.EditFilmUseCase
|
|
import com.project.movienight.domain.model.Film
|
|
import org.springframework.http.HttpStatus
|
|
import org.springframework.web.bind.annotation.*
|
|
import java.util.UUID
|
|
|
|
@RestController
|
|
@RequestMapping("/api/films")
|
|
class FilmController(
|
|
private val createFilmUseCase: CreateFilmUseCase,
|
|
private val editFilmUseCase: EditFilmUseCase,
|
|
private val deleteFilmUseCase: DeleteFilmUseCase,
|
|
) {
|
|
|
|
@PostMapping
|
|
@ResponseStatus(HttpStatus.CREATED)
|
|
fun create(@RequestBody request: CreateFilmRequest): Film =
|
|
createFilmUseCase.create(
|
|
CreateFilmCommand(
|
|
title = request.title,
|
|
description = request.description,
|
|
)
|
|
)
|
|
|
|
@PatchMapping("/{id}")
|
|
fun edit(
|
|
@PathVariable id: UUID,
|
|
@RequestBody request: EditFilmRequest,
|
|
): Film =
|
|
editFilmUseCase.edit(
|
|
id = id,
|
|
command = EditFilmCommand(
|
|
title = request.title,
|
|
description = request.description,
|
|
)
|
|
)
|
|
|
|
@DeleteMapping("/{id}")
|
|
@ResponseStatus(HttpStatus.NO_CONTENT)
|
|
fun delete(@PathVariable id: UUID) =
|
|
deleteFilmUseCase.delete(id)
|
|
}
|
|
|
|
data class CreateFilmRequest(
|
|
val title: String,
|
|
val description: String,
|
|
)
|
|
|
|
data class EditFilmRequest(
|
|
val title: String,
|
|
val description: String,
|
|
)
|