Newer
Older
bremer / src / main / kotlin / controller / api / TagApiController.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.TagAudioRequest
import net.piedpiper.bremer.model.api.TagAudioResponse
import net.piedpiper.bremer.model.api.TagRequest
import net.piedpiper.bremer.model.api.AllTagsResponse
import net.piedpiper.bremer.service.TagService
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*

@RestController("bremer.controller.TagApiController")
@RequestMapping("bremer/api/tag")
class TagApiController(
    @Qualifier("bremer.service.TagService")
    private val tagService: TagService
) {
    @GetMapping
    fun getAllTags(): ResponseEntity<AllTagsResponse> = ResponseEntity.ok(tagService.getAllTags())

    @PostMapping
    fun createTag(@Valid @RequestBody request: TagRequest): ResponseEntity<Void> {
        tagService.createTag(request)
        return ResponseEntity.ok(null)
    }

    @GetMapping("{slug}")
    fun getAudioList(@PathVariable("slug") slug: String): ResponseEntity<TagAudioResponse> =
        ResponseEntity.ok(tagService.getAudioListByTagSlug(slug))

    @PutMapping("{slug}")
    fun updateTag(
        @PathVariable("slug") slug: String,
        @Valid @RequestBody request: TagRequest
    ): ResponseEntity<Void> {
        tagService.updateTag(slug, request)
        return ResponseEntity.ok(null)
    }

    @PostMapping("audio/{slug}")
    fun addAudioList(
        @PathVariable("slug") slug: String,
        @Valid @RequestBody request: TagAudioRequest
    ): ResponseEntity<Void> {
        tagService.addTagToAudioList(slug, request)
        return ResponseEntity.ok(null)
    }

    @DeleteMapping("audio/{slug}")
    fun deleteAudioList(
        @PathVariable("slug") slug: String,
        @Valid @RequestBody request: TagAudioRequest
    ): ResponseEntity<Void> {
        tagService.deleteTagFromAudioList(slug, request)
        return ResponseEntity.ok(null)
    }
}