{ "projectName": "PetCare", "domain": "pet", "techStack": { "frontend": "React Native 0.76 + Expo / Flutter 3.x", "backend": "NestJS + Prisma", "database": "PostgreSQL 15 + Redis 7 + MinIO(文件存储)", "deployment": "Docker Compose + Nginx / K8s(规模化)", "considerations": [] }, "architectureDiagram": "┌─────────────────────────────────────────────────────────┐\n│ PetCare — System Architecture │\n├─────────────────────────────────────────────────────────┤\n│ │\n│ ┌──────────────────────┐ ┌──────────────────────┐ │\n│ │ Client Layer │ │ Admin / Web │ │\n│ │ React Native 0.76 + Expo / Flutter 3.x │ │ React + Vite (Web) │ │\n│ └──────────┬───────────┘ └──────────┬───────────┘ │\n│ │ │ │\n│ └──────────┬────────────────┘ │\n│ │ │\n│ ┌─────────▼──────────┐ │\n│ │ API Gateway │ │\n│ │ Nginx / Kong │ │\n│ └─────────┬──────────┘ │\n│ │ │\n│ ┌─────────▼──────────┐ │\n│ │ Backend Services │ │\n│ │ NestJS + Prisma │ │\n│ └─────────┬──────────┘ │\n│ │ │\n│ ┌───────────────┼───────────────┐ │\n│ │ │ │ │\n│ ┌─────▼─────┐ ┌──────▼──────┐ ┌────▼─────┐ │\n│ │ PostgreSQL 15│ │ Redis Cache │ │ MinIO │ │\n│ │ Primary │ │ Session │ │ Files │ │\n│ └───────────┘ └─────────────┘ └──────────┘ │\n│ │\n├─────────────────────────────────────────────────────────┤\n│ Modules: │\n│ 1 宠物档案 │\n│ 2 Schedule │\n│ 3 日常记录 │\n│ 4 Storage │\n│ 5 附近医院 │\n│ 6 健康百科 │\n│ │\n└─────────────────────────────────────────────────────────┘", "dataFlows": [ { "page": "健康日程", "route": "/schedule", "description": "疫苗、驱虫、体检日历", "dataFlow": [ "GET /api/schedules → 获取健康日程列表", "POST /api/schedules → 创建健康日程" ], "direction": "Client → API Gateway → Backend → Database → Response → Client" }, { "page": "日常记录", "route": "/daily-log", "description": "饮食/运动/排泄记录表单", "dataFlow": [ "POST /api/daily-logs → 记录日常活动", "GET /api/daily-logs → 查询日常记录" ], "direction": "Client → API Gateway → Backend → Database → Response → Client" }, { "page": "成长相册", "route": "/album", "description": "时间线照片浏览", "dataFlow": [ "POST /api/albums → 上传宠物照片" ], "direction": "Client → API Gateway → Backend → Database → Response → Client" } ], "modules": [ { "name": "宠物档案", "label": "宠物档案", "features": [ "宠物档案" ], "responsibilities": [ "提供 宠物档案 相关功能" ] }, { "name": "schedule", "label": "Schedule", "features": [ "健康日程" ], "responsibilities": [ "提供 健康日程 相关功能" ] }, { "name": "日常记录", "label": "日常记录", "features": [ "日常记录" ], "responsibilities": [ "提供 日常记录 相关功能" ] }, { "name": "storage", "label": "Storage", "features": [ "成长相册" ], "responsibilities": [ "提供 成长相册 相关功能" ] }, { "name": "附近医院", "label": "附近医院", "features": [ "附近医院" ], "responsibilities": [ "提供 附近医院 相关功能" ] }, { "name": "健康百科", "label": "健康百科", "features": [ "健康百科" ], "responsibilities": [ "提供 健康百科 相关功能" ] }, { "name": "content", "label": "Content", "features": [ "社区分享" ], "responsibilities": [ "提供 社区分享 相关功能" ] }, { "name": "pet", "label": "宠物管理", "features": [ "宠物档案", "健康日程" ], "responsibilities": [ "提供 宠物档案 相关功能", "提供 健康日程 相关功能" ] } ], "databaseSchema": [ { "table": "users", "description": "用户表", "fields": [ { "name": "id", "type": "UUID", "constraints": "PK, DEFAULT gen_random_uuid()" }, { "name": "phone", "type": "VARCHAR(20)", "constraints": "UNIQUE" }, { "name": "nickname", "type": "VARCHAR(64)" }, { "name": "avatar_url", "type": "TEXT" }, { "name": "created_at", "type": "TIMESTAMPTZ", "constraints": "DEFAULT NOW()" }, { "name": "updated_at", "type": "TIMESTAMPTZ", "constraints": "DEFAULT NOW()" } ], "indexes": [ "idx_users_phone ON users(phone)" ] }, { "table": "pets", "description": "宠物档案表", "fields": [ { "name": "id", "type": "UUID", "constraints": "PK" }, { "name": "owner_id", "type": "UUID", "constraints": "FK → users.id" }, { "name": "name", "type": "VARCHAR(64)", "constraints": "NOT NULL" }, { "name": "species", "type": "VARCHAR(32)" }, { "name": "breed", "type": "VARCHAR(64)" }, { "name": "birth_date", "type": "DATE" }, { "name": "weight_kg", "type": "DECIMAL(5,2)" }, { "name": "avatar_url", "type": "TEXT" }, { "name": "created_at", "type": "TIMESTAMPTZ", "constraints": "DEFAULT NOW()" } ] }, { "table": "schedules", "description": "健康日程表", "fields": [ { "name": "id", "type": "UUID", "constraints": "PK" }, { "name": "pet_id", "type": "UUID", "constraints": "FK → pets.id" }, { "name": "type", "type": "VARCHAR(32)", "constraints": "NOT NULL" }, { "name": "title", "type": "VARCHAR(128)", "constraints": "NOT NULL" }, { "name": "scheduled_at", "type": "TIMESTAMPTZ" }, { "name": "completed", "type": "BOOLEAN", "constraints": "DEFAULT false" } ] }, { "table": "daily_logs", "description": "日常记录表", "fields": [ { "name": "id", "type": "UUID", "constraints": "PK" }, { "name": "pet_id", "type": "UUID", "constraints": "FK → pets.id" }, { "name": "category", "type": "VARCHAR(32)", "constraints": "NOT NULL" }, { "name": "value", "type": "TEXT" }, { "name": "logged_at", "type": "TIMESTAMPTZ", "constraints": "DEFAULT NOW()" } ] } ], "apiDesign": [ { "resource": "albums", "basePath": "/api/albums", "endpoints": [ { "method": "POST", "path": "/api/albums", "description": "上传宠物照片" } ] }, { "resource": "daily-logs", "basePath": "/api/daily-logs", "endpoints": [ { "method": "POST", "path": "/api/daily-logs", "description": "记录日常活动" }, { "method": "GET", "path": "/api/daily-logs", "description": "查询日常记录" } ] }, { "resource": "hospitals", "basePath": "/api/hospitals", "endpoints": [ { "method": "GET", "path": "/api/hospitals", "description": "查询附近医院" } ] }, { "resource": "pets", "basePath": "/api/pets", "endpoints": [ { "method": "POST", "path": "/api/pets", "description": "添加宠物档案" }, { "method": "GET", "path": "/api/pets/:id", "description": "获取宠物详情" }, { "method": "PUT", "path": "/api/pets/:id", "description": "更新宠物信息" } ] }, { "resource": "schedules", "basePath": "/api/schedules", "endpoints": [ { "method": "GET", "path": "/api/schedules", "description": "获取健康日程列表" }, { "method": "POST", "path": "/api/schedules", "description": "创建健康日程" } ] } ], "directoryStructure": [ "petcare/", "├── apps/", "│ ├── mobile/ # React Native / Flutter 移动端", "│ │ ├── src/", "│ │ │ ├── screens/ # 页面组件", "│ │ │ │ ├── 宠物档案/", "│ │ │ │ ├── schedule/", "│ │ │ │ ├── 日常记录/", "│ │ │ │ ├── storage/", "│ │ │ ├── components/ # 通用组件", "│ │ │ ├── hooks/ # 自定义 Hooks", "│ │ │ ├── services/ # API 调用层", "│ │ │ ├── store/ # 状态管理", "│ │ │ └── utils/ # 工具函数", "│ │ ├── app.json", "│ │ └── package.json", "│ └── web/ # Web 管理后台", "│ ├── src/", "│ │ ├── pages/", "│ │ ├── components/", "│ │ └── layouts/", "│ └── package.json", "├── packages/", "│ └── shared/ # 共享类型/常量", "├── server/ # NestJS 后端服务", "│ ├── src/", "│ │ ├── modules/ # 业务模块", "│ │ │ ├── 宠物档案/", "│ │ │ │ ├── 宠物档案.controller.ts", "│ │ │ │ ├── 宠物档案.service.ts", "│ │ │ │ ├── 宠物档案.module.ts", "│ │ │ │ └── dto/", "│ │ │ ├── schedule/", "│ │ │ │ ├── schedule.controller.ts", "│ │ │ │ ├── schedule.service.ts", "│ │ │ │ ├── schedule.module.ts", "│ │ │ │ └── dto/", "│ │ │ ├── 日常记录/", "│ │ │ │ ├── 日常记录.controller.ts", "│ │ │ │ ├── 日常记录.service.ts", "│ │ │ │ ├── 日常记录.module.ts", "│ │ │ │ └── dto/", "│ │ │ ├── storage/", "│ │ │ │ ├── storage.controller.ts", "│ │ │ │ ├── storage.service.ts", "│ │ │ │ ├── storage.module.ts", "│ │ │ │ └── dto/", "│ │ │ ├── 附近医院/", "│ │ │ │ ├── 附近医院.controller.ts", "│ │ │ │ ├── 附近医院.service.ts", "│ │ │ │ ├── 附近医院.module.ts", "│ │ │ │ └── dto/", "│ │ ├── common/ # 通用(guards, filters, interceptors)", "│ │ ├── prisma/ # Prisma ORM", "│ │ │ └── schema.prisma", "│ │ ├── config/ # 环境配置", "│ │ └── main.ts", "│ ├── test/", "│ ├── Dockerfile", "│ └── package.json", "├── docker-compose.yml", "├── .github/workflows/ # CI/CD", "│ └── ci.yml", "├── .env.example", "├── README.md", "└── turbo.json # Monorepo 配置" ], "deployment": { "environments": [ "development", "staging", "production" ], "strategy": "Docker Compose + Nginx / K8s(规模化)", "services": [ "API Server (NestJS)", "PostgreSQL 15", "Redis 7" ], "ci": "GitHub Actions → Build → Test → Deploy" }, "meta": { "generatedAt": "2026-06-04T22:58:48.869Z", "sourceDomain": "pet", "moduleCount": 8, "tableCount": 4, "apiEndpointCount": 9 } }