# 🚀 doc_mall 项目迁移指南

## 📋 迁移概述

本指南将帮助你将 `doc_mall` 商城系统模块从当前项目迁移到一个独立的仓库中，确保所有相关模块和依赖项都能正确复用。

---

## 📁 需要迁移的文件和目录清单

### 1. 核心文档和数据库脚本 (`doc_mall/`)

**完整目录结构**：
```
doc_mall/
├── README.md                          # 文档索引
├── TECHNICAL_IMPLEMENTATION.md        # 技术实现拆解
├── MODULE_ANALYSIS.md                 # 模块深度分析
├── FRONTEND_BACKEND_DEBUGGING.md      # 前后端联调指南
├── user_reuse_summary.md              # 用户表复用方案
├── migration_complete_report.md       # 迁移完成报告
├── README_subscription_consumer.md    # 订阅功能说明
├── 裂变红包.md                        # 红包功能文档
├── create_mall_subscription_tables.sql        # 订阅表创建脚本
├── subscription_guard_trigger.sql             # 订阅触发器
├── subscription_rls_policies.sql              # 订阅RLS策略
├── analysis/                          # 分析文档目录
│   └── user_compatibility_analysis.md
├── database/                          # 数据库脚本目录
│   ├── complete_mall_database.sql     # 完整数据库（推荐）
│   ├── database_creation_report.md
│   ├── database_syntax_fix_report.md
│   ├── user_compatibility_implementation.sql
│   ├── product_database.sql
│   ├── mock_data_insert.sql
│   ├── mock_data_documentation.md
│   ├── deployment_guide.md
│   ├── validation_test.sql
│   ├── complete_deployment_guide.md
│   └── [其他SQL和文档文件]
└── reports/                           # 生成报告目录
    ├── system_generation_report.md
    ├── detail_pages_report.md
    └── profile_pages_report.md
```

**迁移操作**：
```bash
# 直接复制整个 doc_mall 目录
cp -r doc_mall/ /path/to/new-repo/doc_mall/
```

---

### 2. 前端页面代码 (`pages/mall/`)

**完整目录结构**：
```
pages/mall/
├── admin/                             # 管理端页面
│   ├── index.uvue
│   ├── profile.uvue
│   ├── user-detail.uvue
│   └── subscription/
│       ├── plan-management.uvue
│       └── user-subscriptions.uvue
├── analytics/                         # 数据分析端页面
│   ├── index.uvue
│   ├── profile.uvue
│   └── report-detail.uvue
├── consumer/                          # 消费者端页面
│   ├── index.uvue
│   ├── product-detail.uvue
│   ├── order-detail.uvue
│   ├── profile.uvue
│   └── subscription/
│       ├── plan-list.uvue
│       ├── plan-detail.uvue
│       ├── subscribe-checkout.uvue
│       ├── my-subscriptions.uvue
│       └── README.md
├── delivery/                          # 配送端页面
│   ├── index.uvue
│   ├── order-detail.uvue
│   └── profile.uvue
├── merchant/                          # 商家端页面
│   ├── index.uvue
│   ├── product-detail.uvue
│   └── profile.uvue
├── service/                           # 客服端页面
│   ├── index.uvue
│   ├── profile.uvue
│   └── ticket-detail.uvue
├── nfc/                               # NFC支付相关（可选）
│   ├── admin/index.uvue
│   ├── librarian/index.uvue
│   ├── merchant/pos-cashier.uvue
│   ├── parent/index.uvue
│   ├── security/index.uvue
│   ├── student/index.uvue
│   ├── teacher/index.uvue
│   └── [其他NFC相关文件]
├── mall.md                            # 业务需求文档
├── nfc.md                             # NFC功能文档
├── nfc-modules-guide.md               # NFC模块指南
├── pages-config.json                  # 页面路由配置（主要）
├── pages-admin.json                   # 管理端路由配置
├── pages-librarian.json               # 图书管理员路由配置
├── pages-merchant.json                # 商家路由配置
├── pages-parent.json                  # 家长路由配置
├── pages-security.json                # 安全员路由配置
├── pages-student.json                 # 学生路由配置
└── pages-teacher.json                 # 教师路由配置
```

**迁移操作**：
```bash
# 复制整个 pages/mall 目录
cp -r pages/mall/ /path/to/new-repo/pages/mall/
```

---

### 3. 类型定义文件 (`types/mall-types.uts`)

**文件路径**：
```
types/mall-types.uts
```

**说明**：
- 包含所有商城系统相关的 TypeScript/UTS 类型定义
- 所有 `pages/mall/` 下的页面都依赖此文件
- 必须迁移，否则前端代码无法编译

**迁移操作**：
```bash
# 复制类型定义文件
mkdir -p /path/to/new-repo/types
cp types/mall-types.uts /path/to/new-repo/types/
```

---

## 🔗 依赖关系分析

### 3.1 内部依赖（必须迁移）

#### Supabase 客户端封装
- **依赖文件**：`components/supadb/aksupainstance.uts`
- **使用情况**：所有商城页面都通过 Supabase 客户端访问数据库
- **迁移建议**：
  - 如果新仓库也需要使用 Supabase，需要迁移此文件
  - 或者创建新的 Supabase 客户端封装

#### 工具函数
- **检查项目**：是否需要 `utils/` 下的工具函数
- **常见使用**：日期格式化、数据验证等
- **迁移建议**：
  - 检查商城页面中 `@/utils/` 的引用
  - 根据需要迁移相应的工具函数

### 3.2 外部依赖（需要配置）

#### 数据库依赖
- **依赖表**：`ak_users` (用户主表)
- **说明**：商城系统复用现有用户表实现单点登录
- **迁移策略**：
  - **方案A**：在新仓库中创建独立的用户表
  - **方案B**：保持与现有用户表的关联（需要跨数据库访问）
  - **方案C**：通过 API 服务访问用户数据

#### Supabase 配置
- **需要配置**：Supabase 项目 URL 和 API Key
- **配置文件**：通常保存在环境变量或配置文件中
- **迁移步骤**：
  1. 在新仓库创建 Supabase 项目（或使用现有项目）
  2. 执行数据库脚本创建表结构
  3. 配置 RLS 策略和权限
  4. 更新前端配置中的 Supabase 连接信息

---

## 📝 迁移步骤详解

### 步骤 1: 创建新仓库

```bash
# 1. 创建新仓库目录
mkdir mall-system
cd mall-system

# 2. 初始化 Git 仓库
git init

# 3. 创建基础目录结构
mkdir -p doc_mall/{analysis,database,reports}
mkdir -p pages/mall
mkdir -p types
mkdir -p components/supadb  # 如果需要
mkdir -p utils              # 如果需要
```

### 步骤 2: 迁移文档和数据库脚本

```bash
# 从原项目复制 doc_mall 目录
cp -r /path/to/akmon/doc_mall/* ./doc_mall/

# 验证文件完整性
ls -la doc_mall/
```

### 步骤 3: 迁移前端代码

```bash
# 复制页面代码
cp -r /path/to/akmon/pages/mall/* ./pages/mall/

# 复制类型定义
cp /path/to/akmon/types/mall-types.uts ./types/

# 验证关键文件
ls -la pages/mall/
ls -la types/mall-types.uts
```

### 步骤 4: 迁移依赖文件（可选）

```bash
# 如果需要 Supabase 客户端
cp -r /path/to/akmon/components/supadb/* ./components/supadb/

# 检查并迁移需要的工具函数
# 查看 pages/mall/ 下文件中的 import 语句
grep -r "from '@/utils" pages/mall/
```

### 步骤 5: 更新导入路径

在新仓库中，需要检查并更新以下内容：

#### 5.1 检查类型导入
```bash
# 查找所有 mall-types 的引用
grep -r "from '@/types/mall-types" pages/mall/
```

确保导入路径正确：
```typescript
// 应该是相对路径或配置的别名
import type { ProductType } from '@/types/mall-types.uts'
```

#### 5.2 检查 Supabase 导入
```bash
# 查找 Supabase 引用
grep -r "from '@/components/supadb" pages/mall/
```

#### 5.3 检查工具函数导入
```bash
# 查找工具函数引用
grep -r "from '@/utils" pages/mall/
```

### 步骤 6: 配置数据库

#### 6.1 创建 Supabase 项目
1. 访问 Supabase 控制台
2. 创建新项目或使用现有项目
3. 记录项目 URL 和 API Key

#### 6.2 执行数据库脚本
```bash
# 方式1: 通过 Supabase Dashboard SQL Editor
# 打开 doc_mall/database/complete_mall_database.sql
# 复制内容到 Supabase SQL Editor 执行

# 方式2: 通过 psql 命令行（如果使用自建 PostgreSQL）
psql -h localhost -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
```

#### 6.3 配置 RLS 策略
确保执行以下脚本：
- `doc_mall/subscription_rls_policies.sql`
- `doc_mall/subscription_guard_trigger.sql`
- 数据库脚本中已包含的 RLS 策略

#### 6.4 插入测试数据（可选）
```bash
psql -h localhost -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
```

### 步骤 7: 配置前端环境

#### 7.1 创建配置文件
在新仓库根目录创建配置文件（根据你的项目结构）：

**示例：`config/supabase.config.ts`**
```typescript
export const supabaseConfig = {
  url: 'https://your-project.supabase.co',
  anonKey: 'your-anon-key',
  // 其他配置
}
```

#### 7.2 更新 Supabase 客户端初始化
如果迁移了 `components/supadb/aksupainstance.uts`，确保它使用新的配置。

#### 7.3 配置路由
检查并更新以下路由配置文件：
- `pages/mall/pages-config.json` （主要路由配置）
- 其他角色端路由配置 JSON 文件

### 步骤 8: 处理用户表依赖

商城系统依赖 `ak_users` 表，有几种处理方案：

#### 方案 A: 创建独立的用户表（推荐用于完全独立部署）
```sql
-- 创建独立的用户表（简化版）
CREATE TABLE public.mall_users (
    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
    phone VARCHAR(20) UNIQUE NOT NULL,
    email VARCHAR(255),
    nickname VARCHAR(100),
    -- 其他必要字段
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```

然后更新所有 `ml_user_profiles` 等表的外键引用：
```sql
-- 修改外键引用
ALTER TABLE public.ml_user_profiles 
DROP CONSTRAINT ml_user_profiles_user_id_fkey;

ALTER TABLE public.ml_user_profiles 
ADD CONSTRAINT ml_user_profiles_user_id_fkey 
FOREIGN KEY (user_id) REFERENCES public.mall_users(id) ON DELETE CASCADE;
```

#### 方案 B: 通过 API 服务访问用户数据
- 保持数据库结构不变
- 通过 API 服务层访问用户数据
- 前端不直接访问 `ak_users` 表

#### 方案 C: 跨数据库访问（复杂，不推荐）
- 保持现有的数据库引用
- 配置跨数据库访问权限

### 步骤 9: 测试和验证

#### 9.1 编译测试
```bash
# 尝试编译项目（根据你的构建工具）
npm run build
# 或
uni-app-x build
```

#### 9.2 数据库连接测试
- 测试 Supabase 连接
- 验证 RLS 策略是否生效
- 测试 CRUD 操作

#### 9.3 功能测试
- 测试各个角色端页面是否能正常加载
- 测试核心业务流程（商品浏览、下单等）
- 测试权限控制

---

## 🔧 迁移后需要修改的内容

### 1. 更新导入路径

检查并更新所有文件中的导入路径，确保它们指向正确的位置：

```typescript
// 原项目中的导入
import type { ProductType } from '@/types/mall-types.uts'
import { supabase } from '@/components/supadb/aksupainstance.uts'

// 新仓库中可能需要调整为
import type { ProductType } from '@/types/mall-types.uts'
import { supabase } from '@/lib/supabase/client.uts'  // 如果路径改变了
```

### 2. 更新数据库表引用

如果用户表方案改变，需要更新所有相关的外键和查询：

```sql
-- 原项目中引用 ak_users
user_id UUID NOT NULL REFERENCES public.ak_users(id)

-- 如果改为独立用户表
user_id UUID NOT NULL REFERENCES public.mall_users(id)
```

### 3. 更新环境变量和配置

- Supabase 项目 URL 和 API Key
- 数据库连接字符串
- 其他环境相关配置

### 4. 更新文档中的路径引用

检查 `doc_mall/` 下的文档，更新其中的文件路径引用：

```markdown
# 原文档中的路径
- `../types/mall-types.uts`

# 新仓库中应该为
- `types/mall-types.uts`
```

---

## ✅ 迁移检查清单

使用以下清单确保迁移完整：

- [ ] **文档迁移**
  - [ ] `doc_mall/` 目录完整复制
  - [ ] 所有子目录（analysis, database, reports）已迁移
  - [ ] 文档中的路径引用已更新

- [ ] **前端代码迁移**
  - [ ] `pages/mall/` 所有页面文件已迁移
  - [ ] `types/mall-types.uts` 已迁移
  - [ ] 所有路由配置文件（pages-*.json）已迁移
  - [ ] 业务需求文档（mall.md）已迁移

- [ ] **依赖文件迁移**
  - [ ] Supabase 客户端封装已迁移或重新创建
  - [ ] 必要的工具函数已迁移
  - [ ] 组件依赖已处理

- [ ] **数据库配置**
  - [ ] Supabase 项目已创建并配置
  - [ ] 数据库脚本已执行
  - [ ] RLS 策略已配置
  - [ ] 测试数据已插入（可选）
  - [ ] 用户表依赖已处理

- [ ] **代码适配**
  - [ ] 所有导入路径已更新
  - [ ] 数据库表引用已更新（如需要）
  - [ ] 配置文件已更新
  - [ ] 环境变量已配置

- [ ] **测试验证**
  - [ ] 项目可以正常编译
  - [ ] 数据库连接正常
  - [ ] 页面可以正常加载
  - [ ] 核心功能测试通过

---

## 🚨 常见问题和解决方案

### 问题 1: 编译错误 - 找不到类型定义

**错误信息**：
```
Cannot find module '@/types/mall-types.uts'
```

**解决方案**：
1. 确认 `types/mall-types.uts` 文件已迁移
2. 检查 TypeScript/UTS 配置中的路径别名设置
3. 确保 `@/types` 正确映射到 `types/` 目录

### 问题 2: Supabase 连接失败

**错误信息**：
```
Failed to connect to Supabase
```

**解决方案**：
1. 检查 Supabase 项目 URL 和 API Key 配置
2. 验证网络连接
3. 检查 Supabase 项目的状态

### 问题 3: RLS 策略导致权限错误

**错误信息**：
```
new row violates row-level security policy
```

**解决方案**：
1. 确认已执行所有 RLS 策略脚本
2. 检查用户认证状态
3. 验证 RLS 策略的 SELECT/INSERT/UPDATE 权限设置

### 问题 4: 外键约束错误

**错误信息**：
```
foreign key constraint "ml_user_profiles_user_id_fkey" fails
```

**解决方案**：
1. 如果使用独立用户表，需要更新外键引用
2. 确保引用的用户记录存在
3. 检查外键约束的 CASCADE 设置

---

## 📚 参考资料

- [Supabase 官方文档](https://supabase.com/docs)
- [uni-app-x 官方文档](https://uniapp.dcloud.net.cn/uni-app-x/)
- [PostgreSQL 官方文档](https://www.postgresql.org/docs/)
- 项目内部文档：
  - `doc_mall/TECHNICAL_IMPLEMENTATION.md` - 技术实现详情
  - `doc_mall/FRONTEND_BACKEND_DEBUGGING.md` - 调试指南
  - `doc_mall/database/complete_deployment_guide.md` - 数据库部署指南

---

## 📞 迁移支持

如果在迁移过程中遇到问题：

1. **查看文档**：先查看 `doc_mall/` 下的相关文档
2. **检查日志**：查看编译日志和运行时日志
3. **数据库验证**：使用 `doc_mall/database/validation_test.sql` 验证数据库状态
4. **联系开发团队**：提供详细的错误信息和迁移步骤

---

**最后更新**: 2025年1月  
**版本**: v1.0  
**状态**: ✅ 完整迁移指南
