package com.bahadirakin.mvc;
import com.bahadirakin.model.User;
import com.bahadirakin.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
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 java.io.Serializable;
import java.util.List;
/**
* Created by bhdrkn on 08/02/15.
*/
@Controller
@RequestMapping("/rest/users")
public class UserController implements Serializable{
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping(method=RequestMethod.GET)
public ResponseEntity<List<User>> findAll(){
final List<User> users = userService.getAllUsers();
if(users == null){
return new ResponseEntity<List<User>>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<List<User>>(users, HttpStatus.OK);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<User> createUser(@RequestBody User user){
try {
final User dbuser = userService.createUser(user);
return new ResponseEntity<User>(dbuser, HttpStatus.CREATED);
}catch (Exception e){
return new ResponseEntity<User>(HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value="/{id}",method = RequestMethod.GET)
public ResponseEntity<User> getUser(@PathVariable String id){
try {
final User dbuser = userService.findUserById(id);
if(dbuser == null){
return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<User>(dbuser, HttpStatus.OK);
}catch (Exception e){
return new ResponseEntity<User>(HttpStatus.NOT_FOUND);
}
}
@RequestMapping(value="/{id}",method = RequestMethod.PUT)
public ResponseEntity<User> updateUser(@PathVariable String id, @RequestBody User user){
try {
final User dbuser = userService.updateUser(id, user);
return new ResponseEntity<User>(dbuser, HttpStatus.OK);
}catch (Exception e){
return new ResponseEntity<User>(HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value="/{id}",method = RequestMethod.DELETE)
public ResponseEntity<User> deleteUser(@PathVariable String id, @RequestBody User user){
try {
final User dbuser = userService.deleteUser(id, user);
return new ResponseEntity<User>(dbuser, HttpStatus.OK);
} catch (RuntimeException e){
return new ResponseEntity<User>(HttpStatus.UNAUTHORIZED);
} catch (Exception e){
return new ResponseEntity<User>(HttpStatus.BAD_REQUEST);
}
}
}