allfree-springboot-backend / src / main / java / com / allfree / allfreespringbackend / controlller / UserController.java
UserController.java
Raw
package com.allfree.allfreespringbackend.controlller;

import com.allfree.allfreespringbackend.common.dto.CommonArticleResponseDTO;
import com.allfree.allfreespringbackend.common.dto.CommonResponseDTO;
import com.allfree.allfreespringbackend.service.UserService;
import com.allfree.allfreespringbackend.user.User;
import com.allfree.allfreespringbackend.user.dto.NewUserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/v1/")
public class UserController {


    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping("/users/new")
    public User createUser(@RequestBody NewUserDTO newUser) {
        final User user = User.loadFromUserDTO(newUser);
        return userService.saveUser(user);
    }
//    @PostMapping("/users/new")
//    public User createUser(@RequestBody NewUserDTO newUser){
//        try{
//            return userService.saveUserD(newUser);
//        } catch (Exception e){
//             e.printStackTrace();
//             return null;
//        }
//    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    // TODO: 17.02.2022 check  if username || email already exist 
    @PutMapping("/users/update/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

    @DeleteMapping("/users/delete/{id}")
    public Map<String, Boolean> deleteUser(@PathVariable Long id) {
        User userToBeDeleted = userService.getUserById(id);
        userToBeDeleted.setRoles(null);
        userService.deleteUser(userToBeDeleted);
        Map<String, Boolean> response = new HashMap<>();
        response.put("deleted", true);
        return response;
    }

    @GetMapping("/user/{userId}/articles/{articleStatus}")
    public ResponseEntity<?> getUserArticlesByStatus(@PathVariable Long userId, @PathVariable String articleStatus) {
        User user = userService.getUserById(userId);
        if (Objects.nonNull(user) && user.getArticles().size() > 0) {
            return ResponseEntity.ok(CommonArticleResponseDTO.builder().articleList(user.getArticlesByStatus(articleStatus)).build());
        }
        return ResponseEntity.badRequest().body(new CommonResponseDTO("Acest utilizator nu are articole :)"));
    }

}