package com.brahalla.PhotoAlbum.controller.rest;
import com.brahalla.PhotoAlbum.model.json.request.PhotoRequest;
import com.brahalla.PhotoAlbum.service.PhotoService;
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.photos}")
public class PhotoController {
@Autowired
PhotoService photoService;
/* CREATE - create a photo
* REQUEST: POST /api/photos
*/
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> createPhoto(@Valid @RequestBody PhotoRequest photoRequest) {
return new ResponseEntity<>(this.photoService.createPhoto(photoRequest), HttpStatus.CREATED);
}
/* READ - read a photo
* REQUEST: GET /api/photos/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.GET)
public ResponseEntity<?> getPhotoById(@PathVariable("id") Long id) {
return ResponseEntity.ok(this.photoService.getPhotoById(id));
}
/* READ - read a list of photos matching request params
* REQUEST: GET /api/photos
*/
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<?> getPhotos(
@RequestParam(value = "search", required = false) String search,
@PageableDefault(sort = "createdDate") Pageable pageable) {
return ResponseEntity.ok(this.photoService.getPhotos(search, pageable));
}
/* UPDATE - update a photo
* REQUEST: PUT /api/photos/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
public ResponseEntity<?> updatePhoto(@PathVariable("id") Long id, @Valid @RequestBody PhotoRequest photoRequest) {
return ResponseEntity.ok(this.photoService.updatePhoto(id, photoRequest));
}
/* DELETE - delete a photo
* REQUEST: DELETE /api/photos/{id}
*/
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
public ResponseEntity<?> deletePhoto(@PathVariable("id") Long id) {
this.photoService.deletePhoto(id);
return ResponseEntity.ok(null);
}
}