WebsiteArticleController.java 3.3 KB
// website/controller/WebsiteArticleController.java
package com.aigeo.website.controller;

import com.aigeo.website.entity.WebsiteArticle;
import com.aigeo.website.entity.ArticleStatus;
import com.aigeo.website.service.WebsiteArticleService;
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.Optional;

@RestController
@RequestMapping("/api/website-articles")
public class WebsiteArticleController {
    
    @Autowired
    private WebsiteArticleService websiteArticleService;
    
    @GetMapping("/project/{projectId}")
    public List<WebsiteArticle> getArticlesByProjectId(@PathVariable Integer projectId) {
        return websiteArticleService.getArticlesByProjectId(projectId);
    }
    
    @GetMapping("/project/{projectId}/channel/{channelId}")
    public List<WebsiteArticle> getArticlesByProjectIdAndChannelId(
            @PathVariable Integer projectId, @PathVariable Integer channelId) {
        return websiteArticleService.getArticlesByProjectIdAndChannelId(projectId, channelId);
    }
    
    @GetMapping("/project/{projectId}/status/{status}")
    public List<WebsiteArticle> getArticlesByProjectIdAndStatus(
            @PathVariable Integer projectId, @PathVariable ArticleStatus status) {
        return websiteArticleService.getArticlesByProjectIdAndStatus(projectId, status);
    }
    
    @GetMapping("/channel/{channelId}")
    public List<WebsiteArticle> getArticlesByChannelId(@PathVariable Integer channelId) {
        return websiteArticleService.getArticlesByChannelId(channelId);
    }
    
    @GetMapping("/{id}")
    public ResponseEntity<WebsiteArticle> getArticleById(@PathVariable Integer id) {
        Optional<WebsiteArticle> article = websiteArticleService.getArticleById(id);
        return article.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
    
    @PostMapping
    public WebsiteArticle createArticle(@RequestBody WebsiteArticle article) {
        return websiteArticleService.saveArticle(article);
    }
    
    @PutMapping("/{id}")
    public ResponseEntity<WebsiteArticle> updateArticle(@PathVariable Integer id, 
                                                     @RequestBody WebsiteArticle articleDetails) {
        Optional<WebsiteArticle> article = websiteArticleService.getArticleById(id);
        if (article.isPresent()) {
            WebsiteArticle updatedArticle = article.get();
            updatedArticle.setTitle(articleDetails.getTitle());
            updatedArticle.setSummary(articleDetails.getSummary());
            updatedArticle.setContent(articleDetails.getContent());
            updatedArticle.setStatus(articleDetails.getStatus());
            updatedArticle.setPublishedAt(articleDetails.getPublishedAt());
            
            WebsiteArticle savedArticle = websiteArticleService.saveArticle(updatedArticle);
            return ResponseEntity.ok(savedArticle);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteArticle(@PathVariable Integer id) {
        websiteArticleService.deleteArticle(id);
        return ResponseEntity.noContent().build();
    }
}