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.RestController; import com.ufund.api.ufundapi.model.User; import com.ufund.api.ufundapi.persistence.UserDAO; @RestController @RequestMapping("users") public class UserController { private static final Logger LOG = Logger.getLogger(CupboardController.class.getName()); private final UserDAO UserDAO; /** * Create a user controller to receive REST signals * * @param userDAO The Data Access Object */ public UserController(UserDAO userDAO) { this.UserDAO = userDAO; } /** * Creates a User with the provided object * * @param user The user to create * @return OK response and the user if it was successful, INTERNAL_SERVER_ERROR * otherwise */ @PostMapping("") public ResponseEntity createUser(@RequestBody User user) { try { if (UserDAO.createUser(user) != null) { return new ResponseEntity<>(user, HttpStatus.CREATED); } else { return new ResponseEntity<>(HttpStatus.CONFLICT); } } catch (IOException ex) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Responds to the GET request for a {@linkplain User user} for the given id * * @return ResponseEntity with {@link User user} 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("/{name}") public ResponseEntity getUser(@PathVariable String name) { LOG.log(Level.INFO, "GET /user/{0}", name); try { User user = UserDAO.getUser(name); if (user != null) { return new ResponseEntity<>(user, 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 User with the provided one * * @param user The user to update * @return OK response and the user if it was successful, or * INTERNAL_SERVER_ERROR if there was an issue */ @PutMapping("/{name}") public ResponseEntity updateUser(@RequestBody User user, @PathVariable String name) { try { user = UserDAO.updateUser(user, name); if (user != null) { return new ResponseEntity<>(user, HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Deletes a user with the desired name * * @param name The name of the user * @return OK if the user was deleted, NOT_FOUND if the user was not found, or * INTERNAL_SERVER_ERROR if an error occurred */ @DeleteMapping("/{name}") public ResponseEntity deleteUser(@PathVariable String name) { try { if (UserDAO.deleteUser(name)) { return new ResponseEntity<>(HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } }