package org.dicadeveloper.weplantaforest.admin.user;
import org.dicadeveloper.weplantaforest.admin.support.Uris;
import org.dicadeveloper.weplantaforest.admin.views.Views;
import org.dicadeveloper.weplantaforest.common.user.Role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired) )
public class UserController {
private @NonNull UserRepository _userRepository;
@RequestMapping(value = "/users", method = RequestMethod.GET)
@JsonView(Views.OverviewUser.class)
public Iterable<User> getAllUser() {
return _userRepository.findAllByOrderByNameAsc();
}
@RequestMapping(value = Uris.USERNAME_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateUsername(@RequestParam long userId, @RequestParam String newUsername) {
User user = _userRepository.findOne(userId);
if (user != null) {
if (_userRepository.userExists(newUsername) == 1) {
return new ResponseEntity<>(String.format("Ein Nutzer mit diesem Namen(%s) existiert bereits. ", newUsername), HttpStatus.BAD_REQUEST);
} else {
user.setName(newUsername);
}
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = Uris.MAIL_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateMailaddress(@RequestParam long userId, @RequestParam String newMail) {
User user = _userRepository.findOne(userId);
if (user != null) {
if (_userRepository.userWithMailExists(newMail) == 1) {
return new ResponseEntity<>(String.format("Es existiert bereits ein User mit dieser EMail Adresse(%s).", newMail), HttpStatus.BAD_REQUEST);
} else {
user.setMail(newMail);
}
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = Uris.ACTIVE_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateActiveFlag(@RequestParam long userId, @RequestParam boolean activeFlag){
User user = _userRepository.findOne(userId);
if (user != null) {
user.setEnabled(activeFlag);
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
}else{
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = Uris.BANNED_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateBannedFlag(@RequestParam long userId, @RequestParam boolean bannedFlag){
User user = _userRepository.findOne(userId);
if (user != null) {
user.setBanned(bannedFlag);
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
}else{
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = Uris.ROLE_ADMIN_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateAdminRole(@RequestParam long userId, @RequestParam boolean shouldBeAdmin){
User user = _userRepository.findOne(userId);
if (user != null) {
if(shouldBeAdmin && !user.hasRole(Role.ADMIN)){
user.addRole(Role.ADMIN);
}else if(!shouldBeAdmin && user.hasRole(Role.ADMIN)){
user.removeRole(Role.ADMIN);
}
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
}else{
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
@RequestMapping(value = Uris.ROLE_ARTICLE_MANAGER_CHANGE, method = RequestMethod.POST)
public ResponseEntity<?> updateArticleManagerRole(@RequestParam long userId, @RequestParam boolean shouldBeArticleManager){
User user = _userRepository.findOne(userId);
if (user != null) {
if(shouldBeArticleManager && !user.hasRole(Role.ARTICLE_MANAGER)){
user.addRole(Role.ARTICLE_MANAGER);
}else if(!shouldBeArticleManager && user.hasRole(Role.ARTICLE_MANAGER)){
user.removeRole(Role.ARTICLE_MANAGER);
}
_userRepository.save(user);
return new ResponseEntity<>(HttpStatus.OK);
}else{
return new ResponseEntity<>(String.format("Kein Nutzer mit dieser ID [%s] vorhanden.", userId), HttpStatus.BAD_REQUEST);
}
}
}