Newer
Older
bremer / src / main / kotlin / controller / api / PlaylistApiController.kt
/*
 * 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.DeleteMapping
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)
    }

    @DeleteMapping("{slug}")
    fun deletePlaylist(
        @PathVariable("slug") slug: String
    ): ResponseEntity<Void> {
        playlistService.deletePlaylist(slug)
        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)
    }
}