/*
* Copyright (c) 2023. yo-saito. All Rights Reserved.
*/
package net.piedpiper.bremer.controller.api
import jakarta.validation.Valid
import net.piedpiper.bremer.model.api.PlaylistAudioResponse
import net.piedpiper.bremer.model.api.AllPlaylistResponse
import net.piedpiper.bremer.model.api.PlaylistRequest
import net.piedpiper.bremer.model.api.PlaylistAudioRequest
import net.piedpiper.bremer.service.PlaylistService
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController("bremer.controller.PlaylistApiController")
@RequestMapping("bremer/api/playlist")
class PlaylistApiController(
@Qualifier("bremer.service.PlaylistService")
private val playlistService: PlaylistService,
) {
@GetMapping
fun getAllPlaylists(): ResponseEntity<AllPlaylistResponse> =
ResponseEntity.ok(playlistService.getAllPlaylists())
@PostMapping
fun createPlaylist(
@Valid @RequestBody request: PlaylistRequest
): ResponseEntity<Void> {
playlistService.createPlaylist(request)
return ResponseEntity.ok(null)
}
@PutMapping("{slug}")
fun updatePlaylist(
@PathVariable("slug") slug: String,
@Valid @RequestBody request: PlaylistRequest
): ResponseEntity<Void> {
playlistService.updatePlaylist(slug, request)
return ResponseEntity.ok(null)
}
@GetMapping("{slug}")
fun getAudioList(@PathVariable("slug") slug: String): ResponseEntity<PlaylistAudioResponse> =
ResponseEntity.ok(playlistService.getPlaylist(slug))
@PutMapping("audio/{slug}")
fun updateAudioList(
@PathVariable("slug") slug: String,
@Valid @RequestBody request: PlaylistAudioRequest
): ResponseEntity<Void> {
playlistService.updatePlaylistAudioList(slug, request)
return ResponseEntity.ok(null)
}
}