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

import com.allfree.allfreespringbackend.common.dto.PhotoUrlDTO;
import com.allfree.allfreespringbackend.controlller.exception.ResourceNotFoundException;
import com.allfree.allfreespringbackend.model.Article;
import com.allfree.allfreespringbackend.model.ArticleUpdateRequestDTO;
import com.allfree.allfreespringbackend.model.EStatus;
import com.allfree.allfreespringbackend.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

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

    private final ArticleService articleService;

    @Autowired
    public ArticleController(ArticleService articleService) {
        this.articleService = articleService;
    }

    @GetMapping("/articles")
    public List<Article> getAllArticles() {
        return articleService.getAllArticles();
    }

    @GetMapping("articlesForUser/{userId}")
    public List<Article> getArticlesForuser(@PathVariable Long userId) {
        return articleService.getArticlesForUser(userId);
    }

    @PostMapping("/articles/new")
    public Article createArticle(@RequestBody Article article) {
        return articleService.saveArticle(article);
    }

    @GetMapping("/articles/{id}")
    public Article getArticleById(@PathVariable Long id) {
        return articleService.getArticleById(id);
    }

    @PostMapping("/articles/update/{id}")
    public Article updateArticle(@PathVariable Long id, @RequestBody ArticleUpdateRequestDTO article) {
        return articleService.updateArticle(id, article);
    }

    @PutMapping("/articles/updateUrl/{id}")
    public void updateArticleUrl(@PathVariable Long id, @RequestBody PhotoUrlDTO url) {
        articleService.updateArticleUrl(id, url.getUrl());
    }

    @GetMapping("/articles/delete/{id}")
    public boolean deleteArticle(@PathVariable Long id) {
        articleService.deleteArticle(id);
        Map<String, Boolean> response = new HashMap<>();
        try {
            this.articleService.getArticleById(id);
        } catch (ResourceNotFoundException e) {
            return true;
        }
        return false;
    }

    @GetMapping("articles/status/{status}")
    public List<Article> getArticlesByStatus(@PathVariable String status) {
        return articleService.getArticlesByStatus(EStatus.valueOf(status));
    }

    @PutMapping("/articles/{articleID}/updateStatus/{valueStatus}")
    public String updateStatusArticle(@PathVariable Long articleID, @PathVariable String valueStatus) {
        EStatus newStatus = null;
        if (articleService.getArticlesByStatus(valueStatus.toUpperCase())) {
            newStatus = EStatus.valueOf(valueStatus.toUpperCase());
        }
        Article article = articleService.getArticleById(articleID);
        article.setStatus(newStatus);
        articleService.saveArticle(article);
        return "Status updated, => " + newStatus;
    }

    @GetMapping("/articles/acceptAll")
    public String acceptAll() {
        EStatus newStatus = EStatus.valueOf("ACCEPTED");
        for (Article art : articleService.getArticlesByStatus(EStatus.PENDING)) {
            art.setStatus(newStatus);
            articleService.saveArticle(art);
        }
        return "Status updated, => " + newStatus;
    }

    @GetMapping("/articles/declineAll")
    public String declineAll() {
        EStatus newStatus = EStatus.valueOf("DECLINED");
        for (Article art : articleService.getArticlesByStatus(EStatus.PENDING)) {
            art.setStatus(newStatus);
            articleService.saveArticle(art);
        }
        return "Status updated, => " + newStatus;
    }
}