# Project Bootstrap(高层规范) ## 1. 背景与目标 本需求用于完成「正念 APP」项目的**仓库初始化与工程约定落地**,覆盖客户端(React Native + Expo)与后端(FastAPI)的基础目录结构、文档、环境区分与基础设施依赖(MySQL / Redis)隔离策略,为一期功能(推送、小组件、情绪卡片)后续迭代提供稳定底座。 ### 目标 - **仓库结构清晰**:`client/`、`server/`、`infra/`、`scripts/`、`.gitea/` 等职责明确 - **环境可区分(dev / prod)**:客户端与后端均支持 dev/prod 两套配置,不混用资源 - **数据库命名可持续**:MySQL schema 命名统一、可扩展、可一键区分环境 - **Redis 隔离可控**:通过 Redis ACL + key 前缀隔离 dev/pro 数据访问,满足同机部署需求 - **文档可执行**:新人按 README 可完成本地启动、配置、联调(允许依赖尚未完全落地时使用占位说明) ### 非目标(本阶段不做) - 不在本阶段实现完整业务接口与表结构(仅定义约定与边界) - 不在本阶段实现推送业务全链路(仅确定任务调度与资源隔离策略) - 不在本阶段完成生产级监控/告警/灰度(后续需求承接) ## 2. 范围与交付物 ### 范围 - 仓库根目录结构与职责约定 - 客户端/后端 README 规范化(可运行步骤、配置说明、常见问题) - dev/prod 环境区分策略(配置文件命名、变量命名、密钥管理) - MySQL schema 命名约定 - Redis ACL 与 key 前缀隔离约定 ### 交付物 - **根 README**:项目概览、目录结构、一期功能说明、技术栈与环境区分说明 - **`client/README.md`**:客户端启动/调试/环境切换/打包规范 - **`server/README.md`**:后端启动/配置/迁移/任务调度(Celery)说明 - **基础设施约定**(文档层面): - MySQL:schema 命名与字符集约定 - Redis:ACL 用户与 key 前缀隔离方案(dev/pro) ## 3. 用户与核心使用场景 - **开发者(单人或小团队)** - 能快速在本地启动 client/server 并联调 - 能明确 dev/prod 使用的数据库与 Redis 资源不互相污染 - **运维/部署执行者** - 能根据文档完成最小化部署(即使暂不容器化,也应明确运行依赖) ## 4. 功能需求(高层) ### 4.1 仓库结构与职责边界 - `client/`:React Native + Expo 客户端工程 - `server/`:FastAPI 后端工程 - `infra/`:Docker / k8s / nginx 等基础设施(可后置,但需预留) - `scripts/`:构建/部署脚本(可后置,但需预留) - `.gitea/`:CI/CD 工作流(可后置,但需预留) ### 4.2 环境区分(dev / prod) - **客户端**:使用 `.env.dev` / `.env.prod`,不提交真实 `.env`,提供 `.env.example` - **后端**:使用 `.env.dev` / `.env.prod`,不提交真实 `.env`,提供 `.env.example` - **资源隔离原则**: - dev/pro 必须使用**不同的 MySQL schema** - dev/pro 必须使用**不同的 Redis 访问权限(ACL)与 key 前缀** ### 4.3 MySQL 命名约定(schema / 表 / 字段) - **schema(数据库名)**: - prod:`mindfulness` - dev:`mindfulness_dev` - **字符集**:统一 `utf8mb4` - **命名风格**:统一小写 + 下划线(snake_case) - **约束命名**(建议,便于迁移与排障): - 唯一索引:`uq_