← 返回锻造场
已交付 Next.js金融科技多租户遗留系统迁移

Cirene — 联盟营销与佣金 SaaS.

多租户平台:商户发起优惠券活动,联盟推广者按成交在往来账户中累积佣金,商务代表层级则按各自的指标结算。由一套从未上线的 Oracle APEX 遗留系统重写而来。

客户
Cirene
周期
2026
角色
架构师兼主力开发

Domain models

56

Application code

~44.5k LOC

Role hierarchies

4

Legacy replaced

14 PL/SQL pkgs

cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br
cirene.com.br

问题

该业务已在 Oracle APEX 上投入一年多——十四个 PL/SQL 包、OCI 上的 Oracle 数据库、ORDS REST 接口以及三个 Docker 微服务——却仍未把任何东西交到客户面前。技术栈本身不是失败的原因;问题在于没人能快到足以从中学到东西地交付一次改动。

这种局面唯一的好处是:没有生产数据需要迁移。重写可以是一次干净的切割。

解决方案

整体重写为单一 Next.js 应用,在同一套领域模型之上交付四个独立门户:管理端、商户端、联盟端与商务代表端——最后一个还带有自己的下属、指标与月度结算。

  • 优惠券与凭证图片在服务端由 satori 与 resvg 生成,取代了遗留系统为同一任务所需的 Puppeteer 微服务。
  • 合同与条款在富文本编辑器中编辑并支持变量插值,签署行为带签名轨迹入库。
  • 工单支持、带审计日志的身份模拟,以及公开商品目录,补齐了运营每天真正会用到的部分。

系统架构

基于 Server Actions 的 Next.js 单体,Prisma 之上是 PostgreSQL,五十六个模型覆盖完整商业链条。交付物是多阶段构建的 Docker 镜像(standalone 输出)加一份 compose 文件,因此可以自托管而不被单一平台锁定。

  • 支付。Asaas 全链路——订阅收银台、Pix、分离式 Pix 授权、带回放工具的 webhook 接入。
  • 财务。利润表、应付账款,以及与账面流水核对的 OFX 银行对账单导入。
  • 消息。WhatsApp Cloud API,并以脚本管理模板生命周期——创建、校验与文档生成——因为模板审核是这条链路上最慢的一环。
  • 四个 cron 端点负责 Pix 订阅续费、临期订阅、代表月度结算与试用到期。

成果

重写启动的同一年内,系统上线生产并搭起了预发环境,而此前的遗留系统一年多没有交付。商务、财务与联盟三侧运行在同一个数据库、同一套权限模型之上,新增商户不再需要开发人员介入。

完整技术栈

Next.js 16 (App Router)React 19TypeScriptPrisma 7PostgreSQL 16Auth.js v5 + OTPTailwind v4Tiptapsatori + resvgAsaasWhatsApp Cloud APIDocker (standalone)Vitest
João Afonso Assumpção 系统架构师 · 自动化工程师 · 解决方案构建者
© 2026 · 版权所有。 使用 SvelteKit 构建