优艺家沙发翻新小程序后端
基于 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. 安装依赖
npm install
2. 环境配置
复制环境配置文件并填写配置信息:
cp .env.example .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 服务运行,并创建数据库:
CREATE DATABASE sofa_renovation CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
4. 启动应用
# 开发模式
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 接口
- 在对应模块的
dto文件夹中定义数据传输对象 - 在
service中实现业务逻辑 - 在
controller中定义路由和接口 - 添加适当的权限控制和验证
权限控制
使用装饰器进行权限控制:
// 公开接口 (无需认证)
@Public()
// 需要特定角色
@Roles('admin', 'worker')
// 获取当前用户信息
@CurrentUser() user: CurrentUserData
部署说明
生产环境配置
- 设置
NODE_ENV=production - 配置安全的 JWT 密钥
- 关闭数据库同步
synchronize: false - 使用数据库迁移管理数据结构变更
Docker 部署 (可选)
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
贡献指南
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
联系方式
如有问题或建议,请通过以下方式联系:
- 项目 Issues: GitHub Issues
- 邮箱: your-email@example.com
优艺家沙发翻新 - 让老沙发焕然一新 ✨