refactor: 将ResponseMessage移动到config包并增强功能 feat: 添加用户管理相关功能及密码加密配置 fix: 修复HelpController中README文件路径问题 docs: 更新application.properties配置注释 style: 清理无用导入和日志文件
132 lines
4.5 KiB
Java
132 lines
4.5 KiB
Java
package com.qf.myafterprojecy.controller;
|
||
|
||
import com.qf.myafterprojecy.config.ResponseMessage;
|
||
import com.qf.myafterprojecy.pojo.Article;
|
||
import com.qf.myafterprojecy.pojo.dto.ArticleDto;
|
||
import com.qf.myafterprojecy.service.imp.IArticleService;
|
||
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.security.access.prepost.PreAuthorize;
|
||
import org.springframework.validation.annotation.Validated;
|
||
import org.springframework.web.bind.annotation.*;
|
||
|
||
import javax.validation.Valid;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* 文章控制器类,处理文章相关的HTTP请求
|
||
* 提供文章的增删改查功能,以及按作者、分类和浏览量获取文章的接口
|
||
*/
|
||
@RestController
|
||
@RequestMapping("/api/articles")
|
||
@Validated
|
||
public class ArticleController {
|
||
|
||
@Autowired
|
||
private IArticleService articleService; // 注入文章服务接口
|
||
|
||
/**
|
||
* 根据ID获取单个文章
|
||
* @param id 文章ID
|
||
* @return 返回包含文章信息的ResponseMessage对象
|
||
*/
|
||
@GetMapping("/{id}")
|
||
public ResponseMessage<Article> getArticle(@PathVariable String id) {
|
||
return articleService.getArticleById(id);
|
||
}
|
||
/**
|
||
* 获取已发布的文章列表
|
||
* @return 返回包含已发布文章列表的ResponseMessage对象
|
||
*/
|
||
@GetMapping("/published")
|
||
public ResponseMessage<List<Article>> getPublishedArticles() {
|
||
return articleService.getPublishedArticles();
|
||
}
|
||
/**
|
||
* 获取所有文章列表
|
||
* @return 返回包含文章列表的ResponseMessage对象
|
||
*/
|
||
@GetMapping
|
||
public ResponseMessage<List<Article>> getAllArticles() {
|
||
return articleService.getAllArticles();
|
||
}
|
||
/**
|
||
* 根据标题查询文章列表
|
||
* @param title 文章标题
|
||
* @return 返回包含文章列表的ResponseMessage对象
|
||
*/
|
||
@GetMapping("/title/{title}")
|
||
public ResponseMessage<List<Article>> getArticlesByTitle(@PathVariable String title) {
|
||
return articleService.getArticlesByTitle(title);
|
||
}
|
||
|
||
/**
|
||
* 根据属性ID获取该属性下的所有文章
|
||
* @param attributeId 属性ID
|
||
* @return 返回包含文章列表的ResponseMessage对象
|
||
*/
|
||
@GetMapping("/attribute/{attributeId}")
|
||
public ResponseMessage<List<Article>> getArticlesByAttribute(@PathVariable Integer attributeId) {
|
||
return articleService.getArticlesByAttribute(attributeId);
|
||
}
|
||
|
||
/**
|
||
/**
|
||
* 根据属性ID获取最新文章(按创建时间降序)
|
||
* @param attributeId 属性ID
|
||
* @return 返回包含最新文章列表的ResponseMessage对象
|
||
*/
|
||
@GetMapping("/attribute/{attributeId}/latest")
|
||
public ResponseMessage<List<Article>> getLatestArticlesByAttribute(@PathVariable Integer attributeId) {
|
||
return articleService.getLatestArticlesByAttribute(attributeId);
|
||
}
|
||
|
||
/**
|
||
* 创建新文章
|
||
* 仅限AUTHOR角色用户访问
|
||
* @param articleDto 包含文章数据的DTO对象
|
||
* @return 返回包含新创建文章信息的ResponseMessage对象
|
||
*/
|
||
@PostMapping
|
||
@PreAuthorize("hasRole('AUTHOR')")
|
||
public ResponseMessage<Article> createArticle(@Valid @RequestBody ArticleDto articleDto) {
|
||
return articleService.saveArticle(articleDto);
|
||
}
|
||
/**文章浏览量
|
||
* 增加文章浏览量
|
||
* @param id 文章ID
|
||
* @return 返回包含更新后文章信息的ResponseMessage对象
|
||
*/
|
||
@PostMapping("/view/{id}")
|
||
public ResponseMessage<Article> incrementViewCount(@PathVariable Integer id) {
|
||
return articleService.incrementViewCount(id);
|
||
}
|
||
/**
|
||
* 更新现有文章
|
||
* 仅限AUTHOR角色用户访问
|
||
* @param id 要更新的文章ID
|
||
* @param articleDto 包含更新后文章数据的DTO对象
|
||
* @return 返回包含更新后文章信息的ResponseMessage对象
|
||
*/
|
||
@PutMapping("/{id}")
|
||
@PreAuthorize("hasRole('AUTHOR')")
|
||
public ResponseMessage<Article> updateArticle(
|
||
@PathVariable Integer id,
|
||
@Valid @RequestBody ArticleDto articleDto) {
|
||
return articleService.updateArticle(id, articleDto);
|
||
}
|
||
|
||
/**
|
||
* 删除文章
|
||
* 仅限AUTHOR或ADMIN角色用户访问
|
||
* @param id 要删除的文章ID
|
||
* @return 返回包含被删除文章信息的ResponseMessage对象
|
||
*/
|
||
@DeleteMapping("/{id}")
|
||
@PreAuthorize("hasRole('AUTHOR') or hasRole('ADMIN')")
|
||
public ResponseMessage<Article> deleteArticle(@PathVariable Integer id) {
|
||
return articleService.deleteArticle(id);
|
||
}
|
||
|
||
}
|