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

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

import java.util.List;
import java.util.Objects;

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

    private final ArticleService articleService;
    private final UserService userService;

    @Autowired
    public ArticlesManagerController(ArticleService articleService, UserService userService) {
        this.articleService = articleService;
        this.userService = userService;
    }

    @PutMapping("/articleToUser")
    public User addArticleToUser(@RequestBody UpdateUserArticlesDTO updateArticles) {
        User user = userService.getUserById(updateArticles.getUserId());
        for (Article userArticle : updateArticles.getUserArticles()) {
            Article ar = articleService.saveArticle(userArticle);
            user.addArticle(ar);
        }
        return userService.saveUser(user);
    }

    @GetMapping("/userId/{userId}/articles")
    public List<Article> getUserArticles(@PathVariable Long userId) {
        User userById = userService.getUserById(userId);
        if (userById.getArticles().size() != 0) return userById.getArticles();
        return null;
    }

    @PutMapping("test/fav/add")
    public ResponseEntity<?> addArticleToFav(@RequestParam Long userID, @RequestParam Long articleID) {
        User user = userService.getUserById(userID);
        Article article = articleService.getArticleById(articleID);
        if (article == null) {
            return ResponseEntity.badRequest().body(new CommonResponseDTO("Articolul nu exista"));
        }
        user.getFavArticles().add(article);
        article.getUsersLikes().add(user);
        userService.saveUser(user);
        articleService.saveArticle(article);
        return ResponseEntity.ok(new CommonResponseDTO("Articolul [" + user.getFavArticles().get(0).getId() + "] adaugat la favorite"));
    }

    @GetMapping("test/fav/get")
    public List<Article> getArticlesLikedBy(@RequestParam Long userID) {
        return userService.getUserById(userID).getFavArticles();
    }

    @PutMapping("test/fav/delete")
    public ResponseEntity<?> removeArticleFromFav(@RequestParam Long userId, @RequestParam Long articleId) {
        User user = userService.getUserById(userId);
        Article articleToRemove = articleService.getArticleById(articleId);
        if (Objects.nonNull(user) && Objects.nonNull(articleToRemove)) {
            user.getFavArticles().remove(articleToRemove);
            userService.saveUser(user);
            return ResponseEntity.ok("Articol eliminat");
        }
        return ResponseEntity.ok("Articolul nu exista");
    }
}