package cn.meowrain.aioj.backend.blogservice.service;

import cn.meowrain.aioj.backend.blogservice.dao.entity.Article;
import cn.meowrain.aioj.backend.blogservice.dto.req.ArticleCreateRequestDTO;
import cn.meowrain.aioj.backend.blogservice.dto.req.ArticleQueryRequestDTO;
import cn.meowrain.aioj.backend.blogservice.dto.req.ArticleUpdateRequestDTO;
import cn.meowrain.aioj.backend.blogservice.dto.resp.ArticleListResponseDTO;
import cn.meowrain.aioj.backend.blogservice.dto.resp.ArticleResponseDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 文章服务接口
 *
 * @author AIOJ
 */
public interface ArticleService extends IService<Article> {

    /**
     * 创建文章
     *
     * @param request 文章创建请求
     * @return 文章ID
     */
    Long createArticle(ArticleCreateRequestDTO request);

    /**
     * 更新文章
     *
     * @param request 文章更新请求
     * @return 是否成功
     */
    Boolean updateArticle(ArticleUpdateRequestDTO request);

    /**
     * 删除文章（逻辑删除）
     *
     * @param articleId 文章ID
     * @return 是否成功
     */
    Boolean deleteArticle(Long articleId);

    /**
     * 根据ID查询文章详情
     *
     * @param articleId 文章ID
     * @return 文章详情
     */
    ArticleResponseDTO getArticleById(Long articleId);

    /**
     * 根据slug查询文章详情
     *
     * @param slug 文章别名
     * @return 文章详情
     */
    ArticleResponseDTO getArticleBySlug(String slug);

    /**
     * 分页查询文章列表
     *
     * @param request 查询请求
     * @return 文章列表
     */
    IPage<ArticleListResponseDTO> getArticleList(ArticleQueryRequestDTO request);

    /**
     * 发布文章
     *
     * @param articleId 文章ID
     * @return 是否成功
     */
    Boolean publishArticle(Long articleId);

    /**
     * 取消发布文章
     *
     * @param articleId 文章ID
     * @return 是否成功
     */
    Boolean unpublishArticle(Long articleId);

    /**
     * 增加文章浏览量
     *
     * @param articleId 文章ID
     * @return 是否成功
     */
    Boolean incrementViewCount(Long articleId);
}
