73 lines
2.5 KiB
Kotlin
73 lines
2.5 KiB
Kotlin
package com.project.movienight.adapters.web
|
|
|
|
import com.project.movienight.application.ports.input.AddFilmToLibraryCommand
|
|
import com.project.movienight.application.ports.input.AddFilmToLibraryUseCase
|
|
import com.project.movienight.application.ports.input.CreateFilmLibraryCommand
|
|
import com.project.movienight.application.ports.input.CreateFilmLibraryUseCase
|
|
import com.project.movienight.application.ports.input.GetFilmLibraryQuery
|
|
import com.project.movienight.application.ports.input.GetFilmLibraryUseCase
|
|
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryCommand
|
|
import com.project.movienight.application.ports.input.RemoveFilmFromLibraryUseCase
|
|
import com.project.movienight.domain.model.FilmLibrary
|
|
import org.springframework.http.HttpStatus
|
|
import org.springframework.web.bind.annotation.*
|
|
import java.util.UUID
|
|
|
|
@RestController
|
|
@RequestMapping("/api/users/{userId}/library")
|
|
class FilmLibraryController(
|
|
private val createFilmLibraryUseCase: CreateFilmLibraryUseCase,
|
|
private val addFilmToLibraryUseCase: AddFilmToLibraryUseCase,
|
|
private val removeFilmFromLibraryUseCase: RemoveFilmFromLibraryUseCase,
|
|
private val getFilmLibraryUseCase: GetFilmLibraryUseCase,
|
|
) {
|
|
|
|
@PostMapping
|
|
@ResponseStatus(HttpStatus.CREATED)
|
|
fun create(
|
|
@PathVariable userId: UUID,
|
|
@RequestBody request: CreateFilmLibraryRequest,
|
|
): FilmLibrary =
|
|
createFilmLibraryUseCase.create(
|
|
CreateFilmLibraryCommand(
|
|
userId = userId,
|
|
name = request.name,
|
|
)
|
|
)
|
|
|
|
@GetMapping
|
|
fun get(@PathVariable userId: UUID): FilmLibrary =
|
|
getFilmLibraryUseCase.getLibrary(
|
|
GetFilmLibraryQuery(userId = userId)
|
|
)
|
|
|
|
@PostMapping("/films/{filmId}")
|
|
@ResponseStatus(HttpStatus.CREATED)
|
|
fun addFilm(
|
|
@PathVariable userId: UUID,
|
|
@PathVariable filmId: UUID,
|
|
): FilmLibrary =
|
|
addFilmToLibraryUseCase.addFilm(
|
|
AddFilmToLibraryCommand(
|
|
userId = userId,
|
|
filmId = filmId,
|
|
)
|
|
)
|
|
|
|
@DeleteMapping("/films/{filmId}")
|
|
@ResponseStatus(HttpStatus.NO_CONTENT)
|
|
fun removeFilm(
|
|
@PathVariable userId: UUID,
|
|
@PathVariable filmId: UUID,
|
|
) = removeFilmFromLibraryUseCase.removeFilm(
|
|
RemoveFilmFromLibraryCommand(
|
|
userId = userId,
|
|
filmId = filmId,
|
|
)
|
|
)
|
|
}
|
|
|
|
data class CreateFilmLibraryRequest(
|
|
val name: String = "Мои фильмы",
|
|
)
|