# 优艺家沙发翻新小程序后端 基于 Node.js + NestJS + TypeORM 构建的沙发翻新服务小程序后端系统。 ## 技术栈 - **框架**: NestJS v11.x - **数据库**: MySQL - **ORM**: TypeORM v0.3.x - **认证**: JWT (JSON Web Token) - **验证**: class-validator + class-transformer - **文档**: Swagger/OpenAPI - **开发语言**: TypeScript ## 功能模块 ### 🔐 认证模块 (Auth) - 用户注册/登录 - JWT Token 认证 - 角色权限控制 (admin/customer/worker) - 刷新 Token 机制 ### 👤 用户管理 (User) - 用户信息管理 - 个人资料修改 - 用户状态管理 - 管理员用户操作 ### 📸 案例管理 (Case) - 案例展示 (翻新前后对比) - 按服务类型筛选 - 案例点赞功能 - 我的案例管理 ### 🔧 服务管理 (Service) - 服务项目配置 - 价格管理 - 服务状态控制 - 排序管理 ### 📅 预约管理 (Booking) - 在线预约服务 - 预约状态跟踪 - 工人分配 - 价格报价 ## 项目结构 ``` src/ ├── auth/ # 认证模块 │ ├── dto/ # 数据传输对象 │ ├── guards/ # 路由守卫 │ ├── strategies/ # 认证策略 │ └── decorators/ # 装饰器 ├── user/ # 用户管理 ├── case/ # 案例管理 ├── service/ # 服务管理 ├── booking/ # 预约管理 (待开发) ├── entities/ # 数据库实体 ├── config/ # 配置文件 └── main.ts # 应用入口 ``` ## 环境要求 - Node.js >= 18.x - MySQL >= 8.0 - npm >= 9.x ## 快速开始 ### 1. 安装依赖 ```bash npm install ``` ### 2. 环境配置 复制环境配置文件并填写配置信息: ```bash cp .env.example .env ``` 配置 `.env` 文件中的数据库连接信息: ```env # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASS=your_password DB_NAME=sofa_renovation # JWT 配置 JWT_SECRET=your-super-secret-key JWT_EXPIRES_IN=7d JWT_REFRESH_SECRET=your-refresh-secret JWT_REFRESH_EXPIRES_IN=30d # 服务器配置 PORT=3000 NODE_ENV=development # 文件上传配置 UPLOAD_DIR=uploads MAX_FILE_SIZE=5242880 FRONTEND_URL=http://localhost:3000 ``` ### 3. 数据库准备 确保 MySQL 服务运行,并创建数据库: ```sql CREATE DATABASE sofa_renovation CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 4. 启动应用 ```bash # 开发模式 npm run start:dev # 生产模式 npm run start:prod ``` 应用启动后访问: - 应用地址: http://localhost:3000 - API 文档: http://localhost:3000/docs ## API 文档 项目集成了 Swagger,启动服务后可以通过以下地址访问 API 文档: ``` http://localhost:3000/docs ``` ### 主要 API 端点 #### 认证相关 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 - `POST /api/auth/refresh` - 刷新令牌 #### 用户管理 - `GET /api/users/profile` - 获取个人信息 - `PATCH /api/users/profile` - 更新个人信息 - `GET /api/users` - 获取用户列表 (管理员) #### 案例管理 - `GET /api/cases` - 获取案例列表 - `GET /api/cases/:id` - 获取案例详情 - `POST /api/cases` - 创建案例 (工人/管理员) - `POST /api/cases/:id/like` - 点赞案例 #### 服务管理 - `GET /api/services` - 获取服务列表 - `GET /api/services/active` - 获取有效服务 - `POST /api/services` - 创建服务 (管理员) ## 数据库设计 ### 用户表 (users) - 支持多角色:admin(管理员)、customer(客户)、worker(工人) - 用户状态管理:active、inactive、banned ### 案例表 (cases) - 翻新前后图片对比 - 按服务类型分类 - 浏览量和点赞统计 ### 服务表 (services) - 服务类型:面料翻新、皮革翻新、清洁、维修、定制 - 基础价格和预估工期 - 排序和状态管理 ### 预约表 (bookings) - 预约流程状态跟踪 - 客户信息和服务需求 - 工人分配和价格管理 ## 开发指南 ### 添加新的 API 接口 1. 在对应模块的 `dto` 文件夹中定义数据传输对象 2. 在 `service` 中实现业务逻辑 3. 在 `controller` 中定义路由和接口 4. 添加适当的权限控制和验证 ### 权限控制 使用装饰器进行权限控制: ```typescript // 公开接口 (无需认证) @Public() // 需要特定角色 @Roles('admin', 'worker') // 获取当前用户信息 @CurrentUser() user: CurrentUserData ``` ## 部署说明 ### 生产环境配置 1. 设置 `NODE_ENV=production` 2. 配置安全的 JWT 密钥 3. 关闭数据库同步 `synchronize: false` 4. 使用数据库迁移管理数据结构变更 ### Docker 部署 (可选) ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 3000 CMD ["npm", "run", "start:prod"] ``` ## 贡献指南 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 打开 Pull Request ## 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 项目 Issues: [GitHub Issues](https://github.com/your-username/sofa-renovation-backend/issues) - 邮箱: your-email@example.com --- *优艺家沙发翻新 - 让老沙发焕然一新* ✨