一个按 CET-6 写作场景工作的 AI 作文批改与提分工具。前端保留 Next.js,后端已全部迁移到 Java:
- 前端:Next.js 15、React 19、TypeScript、Tailwind CSS
- 后端:Java 21、Spring Boot 4.1、Spring Security、Spring Data JPA
- 数据库:PostgreSQL、Flyway
- 外部服务:OpenAI-compatible 模型、阿里云短信、微信支付 V3
浏览器仍然请求原来的 /api/* URL,Next.js 会把请求转发到 Java 服务,因此前端接口契约没有变化。
需要 Docker Desktop:
cp .env.example .env
docker compose up --build打开 http://localhost:3000。PostgreSQL 和 Spring Boot 会一起启动,Flyway 会自动建表。
未配置 AI key 时,作文批改会返回本地演示报告;OCR 会提示手动输入。开发环境未配置阿里云短信时,验证码只打印在 Java 后端日志中;未配置微信商户号时会返回模拟支付链接。
需要:
- Node.js 20+
- JDK 21
- Docker(只用来运行 PostgreSQL 也可以)
先启动数据库:
docker compose up -d postgres复制并填写环境变量:
cp .env.example .env默认本地数据库配置应为:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/cet6_essay_teacher
JAVA_BACKEND_URL=http://localhost:8080安装依赖并同时启动前后端:
npm install
npm run dev也可以分开启动:
npm run dev:backend
npm run dev:webnpm run lint
npm run typecheck
npm run test:backend
npm run buildJava 后端也可以独立验证:
cd backend
./mvnw test
./mvnw package原接口 URL 与响应结构保持不变:
POST /api/auth/send-codePOST /api/auth/verify-codeGET /api/auth/mePOST /api/auth/logoutPOST /api/reviewPOST /api/ocrPOST /api/payment/createGET /api/payment/status/{orderId}POST /api/payment/notify
Spring Boot 健康检查:GET /actuator/health。
Java 实体沿用原 Prisma 表名、列名与字段类型。已有 PostgreSQL 数据库启动时,Flyway 会以现有 schema 为基线,不会要求清空用户、验证码、使用记录或支付订单。全新数据库会执行 V1__existing_prisma_schema.sql。
前端与 Java 后端需要作为两个服务部署:
- 部署 PostgreSQL。
- 部署
backend/Dockerfile,配置.env.example中的后端变量。 - 构建前端时,把
JAVA_BACKEND_URL设置为 Java 后端的内部或公开地址。 - 微信支付的
WECHAT_PAY_NOTIFY_URL指向 Java 服务的/api/payment/notify。
如果前端继续部署在 Vercel,只运行 npm run build:web;Java 后端必须部署到支持常驻 JVM 或容器的平台。
