将 mini-auth-demo 项目中开发的高度通用模块(地区、地点、小程序认证、支付、乘客管理)以独立 package 方式组织到 /packages 目录下,为未来继承该 starter 的项目提供按需使用的可复用基础模块,同时保持模块的独立性和向后兼容性。
Current relevant functionality:
Technology stack:
Integration points:
What's being added/changed:
Package 架构设计:
packages/
├── server/ # 核心服务器 (现有,重构后)
├── crud-core/ # CRUD核心基础设施 (新增)
├── database-core/ # 数据库核心 (新增)
├── auth-core/ # 认证核心 (新增)
├── utils-core/ # 工具核心 (新增)
├── shared-types/ # 共享类型定义 (新增)
├── mini-auth/ # 小程序认证增强 (新增)
├── mini-payment/ # 小程序支付 (新增)
├── geo-areas/ # 地区模块 (新增)
├── geo-locations/ # 地点模块 (新增)
└── passenger-management/ # 乘客管理 (新增)
How it integrates:
Success criteria:
Primary Risk: 数据库 schema 变更可能影响现有数据 Mitigation: 使用 TypeORM migrations 管理数据库变更,确保数据迁移安全 Rollback Plan: 保留数据库备份,提供回滚脚本,模块化设计便于独立禁用
Primary Risk: 小程序认证与现有认证系统冲突 Mitigation: 扩展现有认证服务,提供多种认证方式共存 Rollback Plan: 保持原有认证方式不变,小程序认证作为可选功能
Primary Risk: Package 依赖关系复杂化 Mitigation: 设计清晰的依赖层次,基础设施package作为基础依赖 Rollback Plan: 保持核心 server package 独立,其他 package 可选择性移除
Primary Risk: 基础设施重构影响现有功能 Mitigation: 分阶段重构,每个阶段完成后进行回归测试 Rollback Plan: 保留重构前的代码备份,提供快速回滚方案
packages/
├── server/ # 核心服务器 (现有,重构后)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── crud-core/ # CRUD核心基础设施 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── database-core/ # 数据库核心 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── auth-core/ # 认证核心 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── utils-core/ # 工具核心 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── shared-types/ # 共享类型定义 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── mini-auth/ # 小程序认证增强 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── mini-payment/ # 小程序支付 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── geo-areas/ # 地区模块 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── geo-locations/ # 地点模块 (新增)
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
└── passenger-management/ # 乘客管理 (新增)
├── src/
├── package.json
└── tsconfig.json
shared-types (基础类型)
↑
database-core (数据库基础设施)
↑
auth-core (认证基础设施) + utils-core (工具基础设施)
↑
crud-core (CRUD基础设施)
↑
业务模块 (geo-areas, mini-auth等)
↑
server (应用入口)
crud-core package
{
"name": "@d8d/crud-core",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/database-core": "workspace:*",
"typeorm": "^0.3.20",
"@hono/zod-openapi": "1.0.2",
"zod": "^4.1.12"
}
}
database-core package
{
"name": "@d8d/database-core",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"typeorm": "^0.3.20",
"pg": "^8.16.3"
}
}
auth-core package
{
"name": "@d8d/auth-core",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"jsonwebtoken": "^9.0.2",
"bcrypt": "^6.0.0"
}
}
utils-core package
{
"name": "@d8d/utils-core",
"dependencies": {
"@d8d/shared-types": "workspace:*"
}
}
shared-types package
{
"name": "@d8d/shared-types",
"dependencies": {
"zod": "^4.1.12"
}
}
geo-areas package
{
"name": "@d8d/geo-areas",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/crud-core": "workspace:*",
"typeorm": "^0.3.20"
}
}
geo-locations package
{
"name": "@d8d/geo-locations",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/crud-core": "workspace:*",
"@d8d/geo-areas": "workspace:*",
"typeorm": "^0.3.20"
}
}
passenger-management package
{
"name": "@d8d/passenger-management",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/crud-core": "workspace:*",
"typeorm": "^0.3.20"
}
}
mini-auth package
{
"name": "@d8d/mini-auth",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/auth-core": "workspace:*",
"jsonwebtoken": "^9.0.2",
"axios": "^1.12.2"
}
}
mini-payment package
{
"name": "@d8d/mini-payment",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"wechatpay-node-v3": "^1.0.0"
}
}
重构后的 server package
{
"name": "@d8d/server",
"dependencies": {
"@d8d/shared-types": "workspace:*",
"@d8d/crud-core": "workspace:*",
"@d8d/database-core": "workspace:*",
"@d8d/auth-core": "workspace:*",
"@d8d/utils-core": "workspace:*",
// 业务模块依赖
"@d8d/geo-areas": "workspace:*",
"@d8d/geo-locations": "workspace:*",
"@d8d/passenger-management": "workspace:*",
"@d8d/mini-auth": "workspace:*",
"@d8d/mini-payment": "workspace:*",
// 其他现有依赖保持不变
}
}
// 基础类型
export interface BaseEntity {
id: string;
createdAt: Date;
updatedAt: Date;
}
// 地区相关类型
export interface Area {
id: string;
name: string;
code: string;
level: number;
parentId?: string;
}
// 地点相关类型
export interface Location {
id: string;
name: string;
latitude: number;
longitude: number;
areaId: string;
}
// 小程序相关类型
export interface MiniAuthUser {
openid: string;
unionid?: string;
sessionKey: string;
}
// Zod schemas
export const areaSchema = z.object({
// ...
});
每个模块 package 遵循统一的导出模式:
// 实体
export { AreaEntity } from './entities/area.entity';
// 服务
export { AreaService } from './services/area.service';
// DTOs
export { CreateAreaDto, UpdateAreaDto } from './dto/area.dto';
// 控制器
export { AreaController } from './controllers/area.controller';
// 路由
export { areaRoutes } from './routes/area.routes';
// 类型
export type { Area, AreaLevel } from './types/area.types';
// package.json - 只需要地区功能
{
"dependencies": {
"@d8d/server": "^1.0.0",
"@d8d/geo-areas": "^1.0.0"
}
}
// package.json - 需要完整地理位置功能
{
"dependencies": {
"@d8d/server": "^1.0.0",
"@d8d/geo-areas": "^1.0.0",
"@d8d/geo-locations": "^1.0.0"
}
}
// package.json - 需要小程序生态功能
{
"dependencies": {
"@d8d/server": "^1.0.0",
"@d8d/mini-auth": "^1.0.0",
"@d8d/mini-payment": "^1.0.0"
}
}
// 只导入需要的模块
import { AreaService } from '@d8d/geo-areas';
import { LocationService } from '@d8d/geo-locations';
import { MiniAuthService } from '@d8d/mini-auth';
// 或者从 server 统一导入
import {
AreaService,
LocationService,
MiniAuthService
} from '@d8d/server';
"请为这个brownfield epic开发详细的用户故事。关键考虑因素:
该epic应该保持系统完整性,同时实现将mini-auth-demo项目中的通用模块(地区、地点、小程序认证、支付、乘客管理)标准化并集成到主项目的目标。"