package com.ufund.api.ufundapi.controller; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.http.HttpStatus; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.ufund.api.ufundapi.model.Need; import com.ufund.api.ufundapi.persistence.CupboardDAO; @RestController @RequestMapping("cupboard") public class CupboardController { private static final Logger LOG = Logger.getLogger(CupboardController.class.getName()); private final CupboardDAO cupboardDAO; /** * Create a cupboard controller to receive REST signals * * @param cupboardDAO The Data Access Object */ public CupboardController(CupboardDAO cupboardDAO) { this.cupboardDAO = cupboardDAO; } /** * Creates a Need with the provided object * * @param need The need to create * @return OK response and the need if it was successful, INTERNAL_SERVER_ERROR otherwise */ @PostMapping("") public ResponseEntity createNeed(@RequestBody Need need) { try { if (need.getMaxGoal() <= 0) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } cupboardDAO.createNeed(need); return new ResponseEntity<>(need, HttpStatus.OK); } catch (IOException ex) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Responds to the GET request for all {@linkplain Need needs} * * @return ResponseEntity with array of {@link Need needs} objects (may be empty) * and * HTTP status of OK
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise */ @GetMapping("") public ResponseEntity getNeeds() { LOG.info("GET /needs"); try { Need[] needs = cupboardDAO.getNeeds(); return new ResponseEntity<>(needs, HttpStatus.OK); } catch (IOException e) { LOG.log(Level.SEVERE, e.getLocalizedMessage()); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Responds to the GET request for all {@linkplain Need need} whose name contains * the text in name * * @param name The name parameter which contains the text used to find the {@link Need need} * * @return ResponseEntity with array of {@link Need need} objects (may be empty) and * HTTP status of OK
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise *

*/ @GetMapping("/") public ResponseEntity searchNeeds(@RequestParam String name) { LOG.info("GET /need/?name="+name); try { Need[] needArray = cupboardDAO.findNeeds(name); return new ResponseEntity<>(needArray, HttpStatus.OK); } catch (IOException e) { LOG.log(Level.SEVERE,e.getLocalizedMessage()); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Responds to the GET request for a {@linkplain Need need} for the given id * * @param id The id used to locate the {@link Need need} * * @return ResponseEntity with {@link Need need} object and HTTP status of OK if * found
* ResponseEntity with HTTP status of NOT_FOUND if not found
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise */ @GetMapping("/{id}") public ResponseEntity getNeed(@PathVariable int id) { LOG.log(Level.INFO, "GET /need/{0}", id); try { Need need = cupboardDAO.getNeed(id); if (need != null) { return new ResponseEntity<>(need, HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } catch (IOException e) { LOG.log(Level.SEVERE, e.getLocalizedMessage()); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Updates a Need with the provided one * * @param need The need to update * @return OK response and the need if it was successful, or INTERNAL_SERVER_ERROR if there was an issue */ @PutMapping("") public ResponseEntity updateNeed(@RequestBody Need need) { try { need = cupboardDAO.updateNeed(need); return new ResponseEntity<>(need, HttpStatus.OK); } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Deletes a single need from the cupboard using the Need's id * * @param id The need's ID * @return OK if the need was deleted, NOT_FOUND if the need was not found, or INTERNAL_SERVER_ERROR if an error occurred */ @DeleteMapping("/{id}") public ResponseEntity deleteNeed(@PathVariable int id) { try { if (cupboardDAO.getNeed(id) != null) { cupboardDAO.deleteNeed(id); return new ResponseEntity<>(HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } }