/* * Copyright (c) 2023. yo-saito. All Rights Reserved. */ package net.piedpiper.bremer.controller.api import jakarta.validation.Valid import net.piedpiper.bremer.model.api.AudioListResponse import net.piedpiper.bremer.model.api.AudioRequest import net.piedpiper.bremer.service.AudioService import org.springframework.beans.factory.annotation.Qualifier import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* @RestController("bremer.controller.AudioApiController") @RequestMapping("bremer/api/audio") class AudioApiController( @Qualifier("bremer.service.AudioService") private val audioService: AudioService ) { companion object { private const val PAGE_LIMIT = 50 private fun splitKeywords(keywords: String?): List<String>? { return if (keywords?.isNotEmpty() == true) { keywords?.split("\\s".toRegex())?.toList() } else { null } } } @GetMapping fun getAudioList( @RequestParam("audio", required = false) audioName: String?, @RequestParam("artist", required = false) artistName: String?, @RequestParam("album", required = false) albumName: String?, @RequestParam("tag", required = false) tagName: String? ): ResponseEntity<AudioListResponse> = ResponseEntity.ok( audioService.getByKeywords( splitKeywords(audioName), splitKeywords(artistName), splitKeywords(albumName), splitKeywords(tagName), PAGE_LIMIT ) ) @GetMapping("history") fun getLeastRecentlyPlayedList(): ResponseEntity<AudioListResponse> = ResponseEntity.ok(audioService.getLeastRecentlyAccessedAudio(PAGE_LIMIT)) @PostMapping("history/{slug}") fun updateHistory( @PathVariable("slug") slug: String ): ResponseEntity<Void> { audioService.updateHistory(slug, PAGE_LIMIT) return ResponseEntity.ok(null) } @PutMapping("{slug}") fun updateAudio( @PathVariable("slug") slug: String, @Valid @RequestBody request: AudioRequest ): ResponseEntity<Void> { audioService.update(slug, request) return ResponseEntity.ok(null) } @DeleteMapping("{slug}") fun deleteAudio( @PathVariable("slug") slug: String ): ResponseEntity<Void> { audioService.delete(slug) return ResponseEntity.ok(null) } }