Files
Knowledge Base System acf549c43c feat: 初始化知识库系统项目
- 实现基于 Laravel 11 和 Filament 3.X 的文档管理系统
- 添加用户认证和分组管理功能
- 实现文档上传、分类和权限控制
- 集成 Word 文档自动转换为 Markdown
- 集成 Meilisearch 全文搜索引擎
- 实现文档在线预览功能
- 添加安全日志和审计功能
- 完整的简体中文界面
- 包含完整的项目文档和部署指南

技术栈:
- Laravel 11.x
- Filament 3.X
- Meilisearch 1.5+
- Pandoc 文档转换
- Redis 队列系统
- Pest PHP 测试框架
2025-12-05 14:44:44 +08:00

671 lines
22 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 实施计划
- [x] 1. 初始化 Laravel 项目和安装 Filament
- 创建新的 Laravel 项目或在现有项目中安装 Filament 3.X
- 配置数据库连接
- 安装 Filament 中文语言包
- 配置应用语言为简体中文
- _需求8.1, 8.2, 8.3, 8.4, 8.5_
- [x] 2. 创建数据库迁移和模型
- [x] 2.1 创建 groups 表迁移和 Group 模型
- 编写迁移文件创建 groups 表id, name, description, timestamps
- 创建 Group 模型并定义关联关系
- _需求5.1_
- [x] 2.2 创建 group_user 中间表迁移
- 编写迁移文件创建 group_user 表id, group_id, user_id, timestamps
- 添加外键约束和唯一索引
- _需求5.2_
- [x] 2.3 更新 User 模型添加分组关联
- 在 User 模型中添加 groups() 关联方法
- 添加 uploadedDocuments() 和 downloadLogs() 关联方法
- _需求5.2_
- [x] 2.4 创建 documents 表迁移和 Document 模型
- 编写迁移文件创建 documents 表(包含所有必需字段和索引)
- 创建 Document 模型并定义 fillable 属性
- 定义与 Group、User 的关联关系
- _需求1.2, 2.1, 2.2, 2.4_
- [x] 2.5 创建 download_logs 表迁移和 DownloadLog 模型
- 编写迁移文件创建 download_logs 表
- 创建 DownloadLog 模型并定义关联关系
- _需求4.3_
- [x] 2.6 运行迁移创建数据库表
- 执行 php artisan migrate 命令
- 验证所有表和索引创建成功
- _需求所有数据模型相关需求_
- [ ] 3. 实现文档权限查询作用域
- [x] 3.1 在 Document 模型中实现 accessibleBy 作用域
- 编写 scopeAccessibleBy 方法实现权限过滤逻辑
- 包含全局文档和用户分组的专用文档
- 排除其他分组的专用文档
- _需求3.1, 3.2, 3.3, 3.4_
- [x] 3.2 编写属性测试验证权限过滤逻辑
- **属性 7用户文档列表权限过滤**
- **属性 8其他分组文档隔离**
- **验证需求3.1, 3.2, 3.3, 3.4**
- [x] 3.3 实现 global 和 dedicated 查询作用域
- 编写 scopeGlobal 方法过滤全局文档
- 编写 scopeDedicated 方法过滤专用文档
- _需求2.3, 6.2_
- [x] 4. 创建 DocumentService 服务类
- [x] 4.1 实现文档上传方法
- 编写 uploadDocument 方法处理文件上传
- 验证文件格式(.doc 或 .docx
- 存储文件到指定位置
- 创建数据库记录
- 实现事务处理确保一致性
- _需求1.1, 1.2, 1.4, 1.5_
- [ ]* 4.2 编写属性测试验证文件上传逻辑
- **属性 1文件格式验证**
- **属性 2文档存储完整性**
- **属性 3上传事务一致性**
- **验证需求1.1, 1.2, 1.4, 1.5**
- [x] 4.3 实现文档访问权限验证方法
- 编写 validateDocumentAccess 方法
- 检查用户是否有权访问指定文档
- _需求4.1, 4.2, 7.1, 7.2_
- [x] 4.4 实现文档下载方法
- 编写 downloadDocument 方法
- 验证用户权限
- 返回文件流式响应
- _需求4.1, 4.4_
- [ ]* 4.5 编写属性测试验证文档下载
- **属性 9有权限文档可下载**
- **属性 10无权限文档访问拒绝**
- **属性 12文档下载往返一致性**
- **验证需求4.1, 4.2, 4.4**
- [x] 4.6 实现下载日志记录方法
- 编写 logDownload 方法
- 记录用户、文档、时间和 IP 地址
- _需求4.3_
- [ ]* 4.7 编写属性测试验证下载日志
- **属性 11下载日志记录**
- **验证需求4.3**
- [ ] 5. 创建 DocumentPolicy 策略类
- [x] 5.1 实现文档策略的各种权限方法
- 编写 viewAny、view、create、update、delete 方法
- 编写 download 方法验证下载权限
- 实现基于分组的权限判断逻辑
- _需求3.1, 3.4, 4.1, 4.2, 7.1, 7.2_
- [ ]* 5.2 编写单元测试验证策略逻辑
- 测试各种权限场景(有权限、无权限、边缘情况)
- 测试全局文档和专用文档的权限差异
- _需求3.1, 3.4, 4.1, 4.2_
- [x] 6. 创建 Filament 资源 - GroupResource
- [x] 6.1 创建 GroupResource 基础结构
- 使用 Filament 命令生成 GroupResource
- 配置中文导航标签和标题
- _需求5.1, 8.1, 8.2_
- [x] 6.2 定义 Group 表单字段
- 添加名称字段(必填,中文标签)
- 添加描述字段(可选,中文标签)
- 配置验证规则
- _需求5.1, 8.2_
- [x] 6.3 定义 Group 表格列
- 添加 ID、名称、描述、创建时间列
- 配置中文列标题
- 添加搜索和排序功能
- _需求5.1, 8.4_
- [x] 6.4 添加用户关系管理器
- 创建 RelationManager 管理分组成员
- 配置用户添加和移除功能
- 使用中文标签
- _需求5.2, 5.3, 5.4_
- [ ]* 6.5 编写属性测试验证分组管理
- **属性 13分组数据持久化**
- **属性 14用户分组关联**
- **属性 15分组分配授予权限**
- **属性 16分组移除撤销权限**
- **验证需求5.1, 5.2, 5.3, 5.4**
- [x] 7. 创建 Filament 资源 - DocumentResource
- [x] 7.1 创建 DocumentResource 基础结构
- 使用 Filament 命令生成 DocumentResource
- 配置中文导航标签和标题
- _需求1.1, 8.1, 8.2_
- [x] 7.2 定义 Document 表单字段
- 添加标题字段(必填,中文标签)
- 添加描述字段(可选,中文标签)
- 添加文件上传字段(限制 .doc 和 .docx 格式)
- 添加类型选择字段(全局/专用,中文选项)
- 添加分组选择字段(当类型为专用时必填)
- 配置验证规则
- _需求1.1, 1.4, 2.1, 2.2, 8.2_
- [x] 7.3 实现文件上传处理逻辑
- 在表单中集成 DocumentService 的上传方法
- 处理文件验证和存储
- 显示中文成功/错误消息
- _需求1.1, 1.2, 1.3, 1.4, 8.3_
- [ ]* 7.4 编写属性测试验证专用文档分组要求
- **属性 4专用文档必须关联分组**
- **验证需求2.2**
- [x] 7.5 定义 Document 表格列
- 添加标题、类型、分组、上传者、上传时间列
- 配置中文列标题
- 使用中文日期格式
- 添加搜索功能
- _需求3.5, 8.4, 8.5_
- [x] 7.6 实现表格查询权限过滤
- 在 getEloquentQuery 方法中应用 accessibleBy 作用域
- 确保用户只能看到有权限的文档
- _需求3.1, 3.2, 3.3, 3.4_
- [x] 7.7 添加文档下载操作
- 创建自定义 Action 用于下载文档
- 集成 DocumentService 的下载方法
- 验证权限并记录日志
- 使用中文按钮标签
- _需求4.1, 4.2, 4.3, 8.2_
- [x] 7.8 添加筛选器
- 添加类型筛选器(全局/专用,中文标签)
- 添加分组筛选器(中文标签)
- 添加上传者筛选器
- _需求6.2, 6.3, 8.2_
- [ ]* 7.9 编写属性测试验证搜索和筛选
- **属性 18关键词搜索匹配**
- **属性 19分类筛选准确性**
- **属性 20分组筛选准确性**
- **属性 21组合筛选交集**
- **验证需求6.1, 6.2, 6.3, 6.5**
- [ ] 8. 更新 UserResource 添加分组管理
- [x] 8.1 在 UserResource 中添加分组关系管理器
- 创建 RelationManager 管理用户所属分组
- 配置分组添加和移除功能
- 使用中文标签
- _需求5.2, 5.3, 5.4_
- [x] 8.2 在用户表单中添加分组选择字段
- 添加多选分组字段
- 配置中文标签
- _需求5.2_
- [x] 9. 配置文件存储
- [x] 9.1 配置 documents 存储磁盘
- 在 config/filesystems.php 中添加 documents 磁盘配置
- 设置为 private 可见性
- _需求1.2, 4.4_
- [x] 9.2 创建文档存储目录
- 创建 storage/app/documents 目录
- 配置适当的权限
- _需求1.2_
- [x] 10. 实现安全日志记录
- [x] 10.1 创建安全日志记录功能
- 创建 SecurityLog 模型和迁移(可选)
- 或使用 Laravel 日志系统记录安全事件
- 记录未授权访问尝试
- _需求7.3_
- [ ]* 10.2 编写属性测试验证安全日志
- **属性 24未授权访问日志记录**
- **验证需求7.3**
- [x] 10.3 在 DocumentPolicy 中集成安全日志
- 在权限验证失败时记录日志
- 包含用户信息、文档信息和时间戳
- _需求7.3_
- [x] 11. 实现分组删除级联处理
- [x] 11.1 在 Group 模型中添加删除事件监听器
- 使用 Model Events 监听 deleting 事件
- 处理关联的专用文档(设置 group_id 为 null 或删除)
- _需求5.5_
- [ ]* 11.2 编写属性测试验证级联处理
- **属性 17分组删除级联处理**
- **验证需求5.5**
- [x] 12. 配置 Filament 面板中文化
- [x] 12.1 配置应用语言设置
- 在 config/app.php 中设置 locale 为 zh_CN
- 配置 fallback_locale
- _需求8.1, 8.2, 8.3, 8.4, 8.5_
- [x] 12.2 发布和配置 Filament 语言文件
- 发布 Filament 语言文件
- 自定义翻译文本以符合业务需求
- _需求8.1, 8.2, 8.3, 8.4_
- [x] 12.3 配置日期时间格式
- 在 Filament 配置中设置中文日期格式
- 配置 Carbon 使用中文语言
- _需求8.5_
- [ ]* 12.4 编写属性测试验证中文化
- **属性 26错误消息中文化**
- **属性 27日期格式中文化**
- **验证需求8.3, 8.5**
- [x] 13. 创建测试工厂Factories
- [x] 13.1 创建 GroupFactory
- 生成随机分组名称和描述
- 使用 Faker 生成中文文本
- _需求测试数据生成_
- [x] 13.2 创建 DocumentFactory
- 生成随机文档数据
- 支持生成全局和专用文档
- 关联随机分组和上传者
- _需求测试数据生成_
- [x] 13.3 创建 DownloadLogFactory
- 生成随机下载日志数据
- 关联随机文档和用户
- _需求测试数据生成_
- [ ] 14. 编写剩余的属性测试
- [ ]* 14.1 编写全局文档访问属性测试
- **属性 5全局文档对所有用户可见**
- **验证需求2.3**
- [ ]* 14.2 编写文档分类持久化属性测试
- **属性 6文档分类持久化**
- **验证需求2.4**
- [ ]* 14.3 编写权限检查属性测试
- **属性 22权限检查验证用户和分组**
- **属性 23数据返回前权限验证**
- **验证需求7.1, 7.2**
- [ ]* 14.4 编写数据隔离属性测试
- **属性 25查询结果数据隔离**
- **验证需求7.4**
- [ ] 15. 编写功能测试
- [ ]* 15.1 编写文档上传流程测试
- 测试管理员上传全局文档
- 测试管理员上传专用文档
- 测试上传无效格式文件被拒绝
- _需求1.1, 1.2, 1.4, 2.1, 2.2_
- [ ]* 15.2 编写权限控制流程测试
- 测试用户查看自己分组的专用文档
- 测试用户无法查看其他分组的专用文档
- 测试用户可以查看所有全局文档
- _需求3.1, 3.2, 3.3, 3.4_
- [ ]* 15.3 编写分组管理流程测试
- 测试创建分组并分配用户
- 测试用户从分组移除后失去权限
- 测试删除分组后文档状态
- _需求5.1, 5.2, 5.3, 5.4, 5.5_
- [ ]* 15.4 编写搜索和筛选流程测试
- 测试按关键词搜索文档
- 测试按分类筛选文档
- 测试组合多个筛选条件
- _需求6.1, 6.2, 6.3, 6.5_
- [ ] 16. 配置错误处理和验证消息
- [ ] 16.1 自定义验证错误消息
- 在语言文件中添加自定义验证消息
- 确保所有消息使用简体中文
- _需求8.3_
- [ ] 16.2 实现全局异常处理
- 在 Handler.php 中自定义异常响应
- 为不同类型的错误返回友好的中文消息
- _需求错误处理策略_
- [ ] 16.3 配置文件上传限制
- 在 php.ini 或 .htaccess 中配置上传大小限制
- 在表单验证中添加文件大小验证
- 显示中文错误提示
- _需求1.1, 错误处理_
- [ ] 17. 性能优化
- [ ] 17.1 添加数据库索引
- 验证所有必要的索引已创建
- 使用 EXPLAIN 分析查询性能
- _需求性能考虑_
- [ ] 17.2 实现查询优化
- 在 Filament 资源中使用 Eager Loading
- 避免 N+1 查询问题
- _需求性能考虑_
- [ ] 17.3 配置缓存
- 配置 Redis 缓存驱动
- 缓存用户分组信息
- 缓存文档元数据
- _需求性能考虑_
- [x] 18. 创建种子数据Seeders
- [x] 18.1 创建演示数据 Seeder
- 创建示例用户
- 创建示例分组
- 创建示例文档
- 建立关联关系
- _需求开发和演示_
- [x] 18.2 运行 Seeder 生成测试数据
- 执行 php artisan db:seed
- 验证数据正确生成
- _需求开发和演示_
- [x] 19. 安装和配置 Meilisearch
- [x] 19.1 安装 Meilisearch 服务
- 安装 Meilisearch 服务器Docker 或本地安装)
- 配置 Meilisearch 主密钥
- 启动 Meilisearch 服务
- _需求10.1, 12.1_
- [x] 19.2 安装 Laravel Scout 和 Meilisearch 驱动
- 安装 laravel/scout 包
- 安装 meilisearch/meilisearch-php 包
- 发布 Scout 配置文件
- _需求10.1, 12.1_
- [x] 19.3 配置 Scout 和 Meilisearch
- 在 .env 中配置 Meilisearch 连接信息
- 在 config/scout.php 中配置索引设置
- 配置可过滤、可排序和可搜索属性
- _需求10.1, 12.1_
- [ ] 20. 添加文档转换功能的数据库字段
- [x] 20.1 创建数据库迁移添加新字段
- 添加 markdown_path 字段varchar 500
- 添加 markdown_preview 字段text
- 添加 conversion_status 字段enum
- 添加 conversion_error 字段text
- 添加相应的索引
- _需求9.1, 9.2_
- [x] 20.2 运行迁移更新数据库
- 执行 php artisan migrate
- 验证新字段创建成功
- _需求9.1, 9.2_
- [x] 20.3 更新 Document 模型
- 添加新字段到 fillable 数组
- 添加 Searchable trait
- 实现 toSearchableArray 方法
- 实现 shouldBeSearchable 方法
- 添加 getMarkdownContent 辅助方法
- _需求9.2, 12.2_
- [x] 21. 安装和配置文档转换工具
- [x] 21.1 选择并安装转换工具
- 安装 Pandoc推荐或 phpoffice/phpword 包
- 验证 Pandoc 可执行文件路径
- 测试转换功能是否正常
- _需求9.1_
- [x] 21.2 创建文档转换配置文件
- 创建 config/documents.php 配置文件
- 配置转换驱动pandoc 或 phpword
- 配置转换超时时间
- 配置队列名称
- _需求9.1_
- [x] 21.3 配置 markdown 存储磁盘
- 在 config/filesystems.php 中添加 markdown 磁盘
- 设置为 private 可见性
- 创建 storage/app/private/markdown 目录
- _需求9.2_
- [x] 22. 实现 DocumentConversionService
- [x] 22.1 创建 DocumentConversionService 类
- 创建服务类文件
- 实现 convertToMarkdown 方法(调用 Pandoc 或 PHPWord
- 实现 saveMarkdownToFile 方法
- 实现 getMarkdownPreview 方法(提取前 500 字符)
- _需求9.1, 9.2_
- [x] 22.2 实现转换队列任务
- 创建 ConvertDocumentToMarkdown Job
- 在 Job 中调用 DocumentConversionService
- 实现转换成功后的处理逻辑
- 实现转换失败后的错误处理
- _需求9.1, 9.3_
- [x] 22.3 实现 queueConversion 方法
- 创建队列任务分发方法
- 更新文档状态为 'processing'
- 分发到 documents 队列
- _需求9.1_
- [ ]* 22.4 编写属性测试验证文档转换
- **属性 28文档上传触发转换**
- **属性 29Markdown 内容持久化**
- **属性 30转换失败不影响文档可用性**
- **属性 31原始文档保留**
- **属性 32文档更新重新转换**
- **验证需求9.1, 9.2, 9.3, 9.4, 9.5**
- [x] 23. 集成文档转换到上传流程
- [x] 23.1 更新 DocumentService 的 uploadDocument 方法
- 在文档保存成功后调用 queueConversion
- 设置初始 conversion_status 为 'pending'
- 确保事务正确处理
- _需求9.1_
- [x] 23.2 更新 DocumentResource 表单
- 在表格中显示转换状态
- 添加转换状态的中文标签
- 添加转换状态筛选器
- _需求9.1_
- [x] 23.3 处理文档更新时的重新转换
- 在文档更新时检测文件是否变更
- 如果文件变更,触发重新转换
- 删除旧的 Markdown 文件
- _需求9.5_
- [x] 24. 实现 DocumentSearchService
- [x] 24.1 创建 DocumentSearchService 类
- 创建服务类文件
- 实现 search 方法(使用 Scout 搜索)
- 实现 filterByUserPermissions 方法
- 实现 prepareSearchableData 方法
- _需求10.1, 10.2, 10.3_
- [x] 24.2 实现索引管理方法
- 实现 indexDocument 方法(读取 Markdown 文件并索引)
- 实现 updateDocumentIndex 方法
- 实现 removeDocumentFromIndex 方法
- 处理 Meilisearch 操作失败的情况
- _需求12.1, 12.3, 12.4, 12.5_
- [x] 24.3 集成索引到文档生命周期
- 在转换完成后自动索引文档
- 在文档更新时更新索引
- 在文档删除时移除索引
- 使用模型事件或观察者模式
- _需求12.1, 12.3, 12.4_
- [ ]* 24.4 编写属性测试验证搜索功能
- **属性 33搜索匹配 Markdown 内容**
- **属性 34搜索覆盖多个字段**
- **属性 35搜索结果权限过滤**
- **属性 36搜索结果包含必需信息**
- **验证需求10.1, 10.2, 10.3, 10.4**
- [ ]* 24.5 编写属性测试验证索引管理
- **属性 40转换完成触发索引**
- **属性 41索引数据完整性**
- **属性 42文档更新同步索引**
- **属性 43文档删除移除索引**
- **属性 44索引失败不影响文档保存**
- **验证需求12.1, 12.2, 12.3, 12.4, 12.5**
- [x] 25. 创建搜索页面
- [x] 25.1 创建 Filament 自定义页面 - SearchPage
- 使用 Filament 命令生成自定义页面
- 配置中文导航标签
- 添加到导航菜单
- _需求10.1_
- [x] 25.2 实现搜索表单
- 添加搜索关键词输入框
- 添加文档类型筛选器
- 添加分组筛选器
- 配置中文标签和占位符
- _需求10.1, 10.5_
- [x] 25.3 实现搜索结果展示
- 创建搜索结果表格或列表
- 显示文档标题、内容片段、类型、上传时间
- 添加下载原始文档操作(不提供 Markdown 预览)
- 实现分页
- 使用中文标签
- _需求10.4_
- [x] 25.4 集成 DocumentSearchService
- 在页面中调用搜索服务
- 应用用户权限过滤
- 处理空搜索关键词
- 显示中文提示信息
- _需求10.1, 10.3, 10.5_
- [x] 26. 实现 MarkdownRenderService
- [x] 26.1 安装 Markdown 渲染库
- 安装 league/commonmark 包
- 或安装其他 Markdown 渲染库
- _需求11.1, 11.2_
- [x] 26.2 创建 MarkdownRenderService 类
- 创建服务类文件
- 实现 render 方法Markdown 转 HTML
- 实现 sanitize 方法(清理 HTML防止 XSS
- 实现 extractPreview 方法(提取摘要)
- _需求11.1, 11.2_
- [x] 26.3 配置 Markdown 渲染选项
- 配置支持的 Markdown 扩展(表格、代码高亮等)
- 配置 HTML 清理规则
- 配置代码高亮样式
- _需求11.2_
- [ ]* 26.4 编写属性测试验证 Markdown 渲染
- **属性 38Markdown 渲染正确性**
- **验证需求11.2**
- [x] 27. 实现文档 Markdown 预览功能(仅在文档管理中)
- [x] 27.1 在 DocumentResource 中添加 Markdown 预览操作
- 在文档列表和详情页添加"预览 Markdown"按钮
- 创建自定义 Action 用于预览 Markdown 内容
- 验证用户权限
- 使用中文按钮标签(如"预览 Markdown"
- 注意:其他地方(如搜索结果)只提供下载原始文档功能
- _需求11.1, 11.3_
- [x] 27.2 创建 Markdown 预览页面
- 创建独立的预览页面或使用 Filament 模态框
- 显示渲染后的 Markdown HTML
- 添加下载原始 Word 文档按钮
- 使用响应式布局,支持移动端查看
- _需求11.1, 11.5_
- [x] 27.3 实现预览控制器方法
- 创建控制器方法处理预览请求
- 验证用户权限(使用 DocumentPolicy
- 读取 Markdown 文件并使用 MarkdownRenderService 渲染
- 处理 Markdown 内容为空的情况(显示提示并提供下载按钮)
- 返回渲染后的 HTML 视图
- _需求11.1, 11.3, 11.4_
- [ ]* 27.4 编写属性测试验证预览功能
- **属性 37有权限文档可预览**
- **属性 39无权限文档预览拒绝**
- **验证需求11.1, 11.3**
- [ ] 28. 编写功能测试 - 文档转换和搜索
- [ ]* 28.1 编写文档转换流程测试
- 测试上传文档后自动触发转换
- 测试转换完成后 Markdown 文件存在
- 测试转换失败时文档仍可用
- 测试更新文档时重新转换
- _需求9.1, 9.2, 9.3, 9.5_
- [ ]* 28.2 编写全文搜索流程测试
- 测试搜索 Markdown 内容中的关键词
- 测试搜索结果遵循权限控制
- 测试搜索多个字段(标题、描述、内容)
- 测试空搜索关键词的处理
- _需求10.1, 10.2, 10.3, 10.5_
- [ ]* 28.3 编写文档预览流程测试
- 测试有权限用户可以预览
- 测试无权限用户无法预览
- 测试 Markdown 正确渲染为 HTML
- 测试预览页面包含下载按钮
- _需求11.1, 11.2, 11.3, 11.5_
- [ ]* 28.4 编写 Meilisearch 索引流程测试
- 测试文档转换后自动索引
- 测试文档更新时同步索引
- 测试文档删除时移除索引
- 测试索引失败不影响文档保存
- _需求12.1, 12.3, 12.4, 12.5_
- [ ] 29. 检查点 - 确保转换和搜索功能正常
- 运行所有新增的测试
- 手动测试文档上传和转换流程
- 手动测试搜索功能
- 手动测试预览功能
- 验证 Meilisearch 索引正常工作
- 如有问题请咨询用户
- _需求9.1-9.5, 10.1-10.5, 11.1-11.5, 12.1-12.5_
- [ ] 30. 最终检查点 - 确保所有测试通过
- 运行所有单元测试、属性测试和功能测试
- 验证测试覆盖率达到目标
- 修复任何失败的测试
- 如有问题请咨询用户
- _需求所有需求_
- [ ] 31. 文档和部署准备
- [ ] 31.1 更新 README 文档
- 添加文档转换和搜索功能说明
- 添加 Meilisearch 安装和配置步骤
- 添加 Pandoc 安装说明
- 更新使用说明
- 使用简体中文编写
- _需求部署和配置_
- [ ] 31.2 更新环境配置示例
- 在 .env.example 中添加 Meilisearch 配置项
- 添加文档转换配置项
- 添加必要的配置项注释
- _需求部署和配置_
- [ ] 31.3 更新部署脚本
- 添加 Meilisearch 服务启动步骤
- 添加队列工作进程启动步骤
- 添加 Markdown 存储目录创建步骤
- 包含数据库迁移步骤
- 包含文件权限配置
- _需求部署和配置_