# AIOJ 博客服务模块

## 模块说明

`aioj-backend-blog-service` 是 AIOJ 系统的博客服务模块，用于用户发帖、分享技术经验、写文章。

## 功能特性

- 文章管理：发布、编辑、删除、草稿箱
- 分类管理：支持多级分类
- 标签系统：文章标签分类和关联
- 评论系统：支持多级评论和回复
- 点赞/收藏：文章和评论点赞、收藏功能
- 浏览统计：文章浏览记录和统计
- Markdown 支持：原生支持 Markdown 编辑和渲染
- 搜索功能：全文搜索文章标题和内容

## 技术栈

- Spring Boot 3.5.7
- MyBatis Plus
- MySQL 8.0
- Redis
- Nacos 服务发现
- FlexMark (Markdown 处理)
- Knife4j (API 文档)

## 端口配置

- 开发环境: 18086
- 上下文路径: /api

## 数据库

数据库名称: `aioj_blog`

初始化 SQL 脚本: `../../db/blog.sql`

### 核心表结构

| 表名 | 说明 |
|------|------|
| blog_article | 文章表 |
| blog_category | 文章分类表 |
| blog_tag | 文章标签表 |
| blog_article_tag | 文章标签关联表 |
| blog_comment | 评论表 |
| blog_like | 点赞表 |
| blog_favorite | 收藏表 |
| blog_view | 浏览记录表 |
| blog_draft | 草稿箱表 |

## 快速开始

### 1. 初始化数据库

```bash
mysql -u root -p < ../../db/blog.sql
```

### 2. 配置数据库连接

编辑 `src/main/resources/application-dev.yml`:

```yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/aioj_blog
    username: your_username
    password: your_password
```

### 3. 启动服务

```bash
mvn spring-boot:run
```

或直接运行主类: `BlogServiceApplication.java`

### 4. 访问 API 文档

启动服务后访问: http://localhost:18086/api/doc.html

## API 接口

### 文章相关

- `POST /api/article` - 创建文章
- `PUT /api/article/{id}` - 更新文章
- `DELETE /api/article/{id}` - 删除文章
- `GET /api/article/{id}` - 获取文章详情
- `GET /api/article/list` - 获取文章列表
- `POST /api/article/publish` - 发布文章

### 分类相关

- `GET /api/category/list` - 获取分类列表
- `POST /api/category` - 创建分类（管理员）

### 标签相关

- `GET /api/tag/list` - 获取标签列表
- `GET /api/tag/hot` - 获取热门标签

### 评论相关

- `POST /api/comment` - 发表评论
- `GET /api/comment/article/{articleId}` - 获取文章评论列表
- `DELETE /api/comment/{id}` - 删除评论

## 开发指南

### 代码结构

```
aioj-backend-blog-service/
├── src/main/java/cn/meowrain/aioj/backend/blogservice/
│   ├── controller/        # 控制器层
│   ├── service/           # 服务层
│   │   └── impl/          # 服务实现层
│   ├── dao/               # 数据访问层
│   │   ├── mapper/        # MyBatis Mapper
│   │   └── model/         # 数据模型
│   ├── dto/               # 数据传输对象
│   ├── vo/                # 视图对象
│   ├── common/            # 公共类
│   ├── config/            # 配置类
│   └── BlogServiceApplication.java
└── src/main/resources/
    ├── mapper/            # MyBatis XML 映射文件
    ├── application.yml    # 主配置文件
    ├── application-dev.yml
    ├── application-test.yml
    ├── application-prod.yml
    └── logback-spring.xml # 日志配置
```

### 待实现功能

- [ ] 文章 CRUD 接口
- [ ] 分类管理接口
- [ ] 标签管理接口
- [ ] 评论系统接口
- [ ] 点赞/收藏接口
- [ ] 文章搜索接口
- [ ] Markdown 渲染服务
- [ ] 文章定时发布
- [ ] 文章审核功能
- [ ] 用户关注和动态

## 更新日志

### 2025-01-20 - 初始创建

**创建者**: Claude Code

**工作内容**:

1. **模块结构搭建**
   - 创建完整的 Maven 模块目录结构
   - 配置 `pom.xml`，引入所需依赖
   - 创建主应用类 `BlogServiceApplication.java`
   - 更新父 `pom.xml`，添加新模块注册

2. **配置文件创建**
   - `application.yml` - 主配置文件
     - 服务端口: 18086
     - 上下文路径: /api
     - MyBatis Plus 配置
     - Knife4j API 文档配置
   - `application-dev.yml` - 开发环境配置
   - `application-test.yml` - 测试环境配置
   - `application-prod.yml` - 生产环境配置
   - `logback-spring.xml` - 日志配置

3. **数据库设计**
   - 创建 `db/blog.sql` 数据库初始化脚本
   - 设计 9 张核心表：
     - `blog_article` - 文章表（支持草稿、发布、下架等状态）
     - `blog_category` - 分类表（支持多级分类）
     - `blog_tag` - 标签表
     - `blog_article_tag` - 文章标签关联表
     - `blog_comment` - 评论表（支持多级回复）
     - `blog_like` - 点赞表
     - `blog_favorite` - 收藏表
     - `blog_view` - 浏览记录表
     - `blog_draft` - 草稿箱表
   - 添加初始分类和标签数据

4. **依赖说明**
   - Spring Boot 3.5.7
   - Spring Cloud & Nacos（服务发现）
   - MyBatis Plus（ORM）
   - FlexMark（Markdown 处理）
   - Knife4j（API 文档）
   - Redis（缓存）
   - MySQL（数据库）

5. **待实现功能**
   - [ ] 文章 CRUD 接口开发
   - [ ] 分类管理接口
   - [ ] 标签管理接口
   - [ ] 评论系统接口
   - [ ] 点赞/收藏接口
   - [ ] 文章搜索接口
   - [ ] Markdown 渲染服务
   - [ ] 文章定时发布
   - [ ] 文章审核功能

**注意事项**:
- 确保先执行 `db/blog.sql` 初始化数据库
- 检查 `application-dev.yml` 中的数据库连接配置
- JWT 配置需与 `aioj-backend-auth` 保持一致
- 启动前确保 Nacos 服务已运行

## License

Copyright © 2025 AIOJ Project
