Skip to content

Repository files navigation

flowers-api

「插了个花」微信小程序业务后端服务。基于 NestJS + PostgreSQL(Prisma) + Redis(BullMQ), AI 能力对接第三方 OpenAI 兼容中转站,图片存储阿里云 OSS。

完整架构设计见 docs/architecture.md。 当前为 P0 脚手架:目录结构与模块骨架已就绪,各业务接口按阶段(P1~P7)逐步实现。

技术栈

  • NestJS 11 / TypeScript
  • Prisma + PostgreSQL
  • BullMQ + Redis(AI 异步任务)
  • 微信小程序 code2session + JWT
  • 第三方 OpenAI 兼容中转站(可插拔 AiProvider
  • 阿里云 OSS / 本地 data URL 存储(可插拔 StorageProvider

dev 数据副本 + 本地开发

本地 API 固定连接当前电脑上的 PostgreSQL 和 Redis。数据库通过只读 pg_dump 完整复制 dev 的 schema、表数据和迁移记录;复制完成后的增删改查、Prisma 迁移、 验证码、登录态和 BullMQ 队列都只写本机。

短信、微信、AI 和 OSS 保留 dev 配置并真实调用。这不会修改 dev PostgreSQL 或 dev Redis,但会真实发送短信、产生 AI 费用,并可能向 dev OSS 写入文件。

首次配置与克隆

# 1. 安装依赖
pnpm install

# 2. 首次使用时创建本地运行配置
Copy-Item .env.example .env
# 将安全保存的 dev 短信/微信/AI/OSS配置填入 .env。
# 需要真实调用这些 dev 服务时,将 ALLOW_REMOTE_SERVICES 改为 true。
# 如需直连 dev 数据库或 Redis,也必须显式启用该开关。

# 3. 单独创建 dev 数据库只读来源配置
Copy-Item .env.dev.source.local.example .env.dev.source.local
notepad .env.dev.source.local
# 只填写 DEV_DATABASE_URL;不要把该连接串放入 .env、README 或 Git。

# 4. 生成 Prisma Client,启动专用本地 PostgreSQL + Redis
pnpm prisma:generate
pnpm infra:up

# 5. 确保本地 API 已停止,然后完整刷新本地 dev 副本
pnpm db:clone-dev -- --replace-local

# 6. 启动本地 API
pnpm start:dev

克隆命令的安全顺序为:

  1. 校验目标严格等于 localhost:55432/flower_local,源地址必须是远程 PostgreSQL。
  2. 对 dev 执行两次只读表统计,并在中间运行 pg_dump;dev 有行数变化时停止。
  3. 验证 dump 后备份当前本地库到 .local/db-backups/
  4. 将 dev dump 恢复到临时本地库,核对每张表的行数,再仅对临时库执行迁移。
  5. 验证成功后切换为 flower_local,清空专用本地 Redis,并删除临时 dev dump。

任何导出、归档校验、恢复或迁移失败都不会替换原本地数据库。数据库切换期间若进程 意外中断,可在 API 停止时运行:

pnpm db:clone-dev -- --recover-previous-local

刷新 dev 副本会覆盖当前 flower_local。命令会先生成被 Git 忽略的本地回滚备份, 但仍应在刷新前确认本地测试数据不再需要。

日常开发

  • API:http://localhost:3001/api
  • Swagger:http://localhost:3001/api/docs
  • Web:http://localhost:3000,接口固定为 http://localhost:3001/api
  • 管理端预留:http://localhost:3002
  • PostgreSQL:127.0.0.1:55432/flower_local
  • Redis:127.0.0.1:56379

需要在本地复现线上 Nginx 反代和大文件上传时,先启动 API,再运行:

pnpm gateway:up

本地网关地址为 http://localhost:8080/api,上传请求体上限为 60m。管理端联调时将 NEXT_PUBLIC_API_BASE_URL 设置为 http://localhost:8080/api 并重启管理端。

# 修改 Prisma schema 后,仅在本地创建和验证迁移
pnpm prisma:migrate

# 查看本地数据库
pnpm prisma:studio

# 创建本地管理员
pnpm admin:create -- --username localadmin

# 停止容器但保留数据
pnpm infra:down

DEV_DATABASE_URL 只有 db:clone-dev 会读取,API、Studio、seed、admin create、 db push 和本地迁移都继续使用 DATABASE_URL

ALLOW_REMOTE_SERVICES=false 是安全默认值:PostgreSQL 和 Redis 必须使用本地地址, AI 必须使用 mock、存储必须使用 minio,且远程服务凭据必须留空。只有明确需要 直连 dev 数据库、Redis、AI、OSS、短信或微信服务时,才将它设为 true;这些调用 可能修改共享数据、发送短信、产生费用或向 dev OSS 写入文件。

只有确定要删除完整本地副本和 Redis 时才运行 pnpm infra:reset;该命令会删除 命名卷。已有的 flowers-postgres:5432redis:6379 不属于本项目的专用 Compose 环境,不应修改或删除。

合并到 dev

  • 提交 API/Web 代码和 Prisma migration,由 dev 部署流程执行 prisma migrate deploy
  • 素材、字典等确需发布的数据必须写成幂等、可审查的数据脚本。
  • 本地用户、帖子、作品、测试账号和数据库 dump 永远不得整体恢复到 dev。

目录结构

src/
├─ main.ts                  # 入口:全局前缀 api、校验管道、Swagger、CORS
├─ app.module.ts            # 根模块:装配 Config/Prisma/Storage + 各业务模块
├─ app.controller.ts        # 健康检查
├─ config/                  # 环境变量加载与校验
├─ common/                  # 守卫 / 装饰器 / 拦截器 / 过滤器 / 通用 DTO
├─ prisma/                  # PrismaModule + PrismaService
├─ storage/                 # 存储适配层(OSS / 本地 data URL)
├─ wechat/                  # 微信内容安全审核(供广场)
└─ modules/
   ├─ auth/                 # 微信登录 + JWT        (P1)
   ├─ users/                # 用户资料              (P2)
   ├─ works/                # 作品 + 创作日历        (P3)
   ├─ ai/                   # image2 / cutout 任务   (P5)
   ├─ upload/               # 图片上传              (P5)
   ├─ materials/            # 自定义花材            (P6)
   └─ plaza/                # 分享广场 + 内容审核     (P4)
prisma/schema.prisma        # 数据模型
compose.yaml                # 本地 PostgreSQL / Redis

开发阶段

阶段 内容
P0 ✅ 脚手架:工程骨架 + 模块结构 + 基础设施
P1 微信 code2session + JWT + 全局守卫
P2 用户资料 GET/PATCH /users/me
P3 作品 CRUD + 日历聚合
P5 AiProvider(中转站) + BullMQ + OSS + image2/cutout
P6 自定义花材
P4 广场 + 微信内容审核
P7 限流 / 日志 / 部署加固

常用脚本

pnpm start:dev        # 开发(热重载)
pnpm build            # 编译
pnpm lint             # 代码检查
pnpm test             # 单测
pnpm prisma:studio    # 可视化查看数据库
pnpm infra:down       # 停止本地基础设施,保留数据卷

About

flowers api

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages