# AssetX 后端设置指南

## 📋 前置要求

- Go 1.23+
- MySQL 8.0+
- Git

## 🚀 快速开始

### 1. 安装依赖

```bash
go mod download
```

### 2. 配置环境变量

已配置的 `.env` 文件：

```bash
# MySQL 配置
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=123456
DB_NAME=assetx

# 服务器配置
PORT=8080
GIN_MODE=debug
```

### 3. 初始化数据库

```bash
# 启动 MySQL
sudo service mysql start

# 运行初始化脚本
./init_db.sh
```

### 4. 启动服务器

```bash
./start.sh
```

或者直接运行：

```bash
go run main.go
```

## 🔌 API 端点

### Public Routes

- `GET /api/ping` - 健康检查
- `GET /api/holders/stats` - 获取所有代币统计
- `GET /api/holders/:tokenType` - 获取指定代币的持有者列表

支持的 tokenType:
- `YT-A`
- `YT-B`
- `YT-C`
- `ytLP`
- `Lending`

### Protected Routes (需要管理员权限)

- `POST /api/holders/update` - 触发区块链数据更新

## 📊 数据库表

### holder_snapshots
持有者快照表，存储从区块链读取的代币持有者数据。

```sql
CREATE TABLE holder_snapshots (
  id INT PRIMARY KEY AUTO_INCREMENT,
  holder_address VARCHAR(42) NOT NULL,
  token_type VARCHAR(50) NOT NULL,
  token_address VARCHAR(42) NOT NULL,
  balance VARCHAR(78) NOT NULL,
  chain_id INT NOT NULL,
  first_seen BIGINT NOT NULL,
  last_updated BIGINT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```

## 🧪 测试

```bash
# 测试 API
curl http://localhost:8080/api/ping

# 获取统计数据
curl http://localhost:8080/api/holders/stats

# 获取 YT-A 持有者
curl http://localhost:8080/api/holders/YT-A
```

## 🐛 常见问题

### MySQL 连接失败

```bash
# 检查 MySQL 是否运行
sudo service mysql status

# 启动 MySQL
sudo service mysql start

# 测试连接
mysql -u root -p123456 -e "SELECT 1"
```

### 数据库不存在

```bash
# 手动创建数据库
mysql -u root -p123456 -e "CREATE DATABASE assetx"
```

### GORM 自动迁移

服务器启动时会自动创建表（如果不存在）。

## 📝 开发说明

### 添加新的 API 端点

1. 在 `holders/` 目录创建处理函数
2. 在 `main.go` 注册路由
3. 在 `models/` 添加数据模型（如需要）

### 数据库迁移

GORM 会自动处理表结构迁移。如需手动迁移：

```go
db.AutoMigrate(&models.YourModel{})
```

## 🔗 相关项目

- 前端项目: `/home/coder/myprojects/assetx/antdesign`
- 数据库 Schema: `/home/coder/myprojects/assetx/database-schema-v1.1-final.sql`
