一个基于 Next.js 的电力现货交易平台(MVP)。默认 UI 语言为简体中文(zh-CN),货币单位为人民币(CNY)。数据库使用 SQLite(后续可平滑迁移到 Postgres)。
- 市场与合约:小时级现货产品(后续可扩展 15 分钟区间)
- 订单与撮合:限价单,价格-时间优先的连续撮合;支持撤单
- 成交与结算:成交即时毛额记账(T+0 简化)
- 市场数据:订单簿与最近成交(初版采用 1s 轮询,后续升级 WebSocket)
- 角色与权限:Trader、Admin(基础审计与配置)
- Next.js 14(App Router, TypeScript)
- Prisma ORM + SQLite
- 身份认证:NextAuth(占位,后续完善)
- 国际化:next-intl(默认 zh-CN)
- 日期/时区:dayjs / date-fns(zh-CN,本地时区 Asia/Shanghai)
- UI:Tailwind CSS
- 工具:ESLint/Prettier、Husky pre-commit、GitHub Actions(CI)
注:若首次克隆仓库,先完成脚手架初始化与数据库迁移;完成后以下命令可用。
- 环境要求:Node.js >= 18.18
- 安装依赖:
- 使用你偏好的包管理器其一:
pnpm i或yarn或npm i
- 使用你偏好的包管理器其一:
- 准备环境变量:
- 复制模板:
cp .env.example .env - 按需填写
.env中的变量(见下文“环境变量”示例)
- 复制模板:
- 数据库与迁移:
- 生成/更新 Prisma Client:
npx prisma generate - 运行开发迁移:
npx prisma migrate dev - 可选:初始化种子数据:
npx prisma db seed
- 生成/更新 Prisma Client:
- 启动开发服务:
pnpm dev(或yarn dev/npm run dev)
当你看到本地 http://localhost:3000 打开成功,并展示中文界面,即表示初始化完成。
- DATABASE_URL="file:./prisma/dev.db"
- NEXTAUTH_SECRET="请生成安全随机值"
- TZ=Asia/Shanghai
备注:
- 生成 NEXTAUTH_SECRET 可使用:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" - 生产环境请设置 NEXTAUTH_URL 并妥善管理密钥。
- 金额单位:数据库与后端以“分”(int)存储与计算;前端以“元”展示。涉及金额运算统一使用 Decimal/Big.js,避免浮点误差。
- 实时性:MVP 阶段采用 1s 轮询获取订单簿/成交数据;后续将升级为 WebSocket 推送。
- 撮合策略:价格-时间优先的连续双边限价撮合(Limit Order Book, LOB)。
- 视觉语义:遵循本地金融惯例——上涨/买单用红,下降/卖单用绿。
- 时区:统一使用 Asia/Shanghai,日期/时间格式遵循 zh-CN 习惯。
- src/app/:Next.js App Router 页面与路由
- src/lib/:通用库(时间格式化、金额换算、Prisma 客户端等)
- prisma/:Prisma schema、migrations 与 seed
- messages/:多语言文案(默认 zh-CN)
- src/app/api/:服务端路由与接口(Route Handlers)
- v0.1 初始化脚手架(Next.js + Prisma + SQLite + i18n + CI)
- v0.2 数据库模型与种子(订单、成交、资金流水、审计)
- v0.3 撮合引擎 V1(内存订单簿 + 持久化)
- v0.4 市场数据与订单簿 UI、下单/撤单流程
- v0.5 权限/风控与运维工具
- 代码风格:ESLint + Prettier;提交前由 Husky 运行
lint和typecheck - Commit 规范:Conventional Commits(feat/fix/chore 等)
- PR 说明:请包含变更动机、截图/录屏(如涉及 UI)、测试说明
本项目使用 MIT License(见 LICENSE)。