package com.brahalla.PhotoAlbum.controller.rest;
import com.brahalla.PhotoAlbum.model.json.request.AlbumRequest;
import com.brahalla.PhotoAlbum.service.AlbumService;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("${photoalbum.route.albums}")
public class AlbumController {
@Autowired
AlbumService albumService;
/* CREATE - create an album
* POST /api/albums
*/
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> createAlbum(@Valid @RequestBody AlbumRequest albumRequest) {
return new ResponseEntity<>(this.albumService.createAlbum(albumRequest), HttpStatus.CREATED);
}
/* READ - read an album
* REQUEST: GET /api/albums/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.GET)
public ResponseEntity<?> getAlbumById(@PathVariable("id") Long id) {
return ResponseEntity.ok(this.albumService.getAlbumById(id));
}
/* READ - read all albums
* REQUEST: GET /api/albums
*/
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<?> getAlbums(
@RequestParam(value = "search", required = false) String search,
@PageableDefault(sort = "createdDate") Pageable pageable) {
return ResponseEntity.ok(this.albumService.getAlbums(search, pageable));
}
/* UPDATE - update an album
* REQUEST: PUT /api/albums/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
public ResponseEntity<?> updateAlbum(@PathVariable("id") Long id, @Valid @RequestBody AlbumRequest albumRequest) {
return ResponseEntity.ok(this.albumService.updateAlbum(id, albumRequest));
}
/* DELETE - delete an album
* REQUEST: DELETE /api/albums/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteAlbum(@PathVariable("id") Long id) {
this.albumService.deleteAlbum(id);
return ResponseEntity.ok(null);
}
}