# 静态资源API设计文档
## 概述
本API提供对足球项目中静态资源的访问,包括球队可视化资源、球员图片和球队HTML数据文件。通过规则生成路径而非存储实际路径,简化了数据库结构。
## 模型设计
### Team(球队)
- `id`: 球队ID
- `name`: 球队名称
### Player(球员)
- `id`: 球员ID
- `name`: 球员名称
- `team`: 所属球队ID
- `team_name`: 所属球队名称(只读)
- `age`: 年龄
- `position`: 位置
- `nationality`: 国籍
### TeamVisual(球队可视化资源)
- `id`: 可视化资源ID
- `team`: 所属球队ID
- `team_name`: 所属球队名称(只读)
- `visual_files`: 可视化文件列表(动态生成)
### TeamPlayerImage(球员图片)
- `id`: 球员图片ID
- `team`: 所属球队ID
- `team_name`: 所属球队名称(只读)
- `player_name`: 球员名称
- `image_path`: 图片路径(动态生成)
### TeamDataHtml(球队HTML数据文件)
- `id`: HTML文件ID
- `team`: 所属球队ID
- `team_name`: 所属球队名称(只读)
- `html_path`: HTML文件路径(动态生成)
## 路径生成规则
### TeamVisual
每个球队有8个PNG文件和1个HTML文件,路径格式为:
```
static/team-visuals/{team_name}/{file_name}
```
### TeamPlayerImage
每个球员一张图片,路径格式为:
```
static/team_player_images/{team_name}/{player_name_with_underscores}.jpg
```
### TeamDataHtml
每个球队一个HTML文件,路径格式为:
```
static/team_data_html/{simplified_team_name}.html
```
其中简化球队名通过映射表生成:
- Arsenal → arsenal
- Manchester City → manchestercity
- 等等...
## API端点
### 球队相关
- `GET /api/v1/teams/` - 获取所有球队列表
- `GET /api/v1/teams/{id}/` - 获取特定球队信息
### 球员相关
- `GET /api/v1/players/` - 获取所有球员列表
- `GET /api/v1/players/{id}/` - 获取特定球员信息
### 球队可视化资源
- `GET /api/v1/team-visuals/` - 获取所有球队可视化资源列表
- `GET /api/v1/team-visuals/{id}/` - 获取特定球队的可视化资源信息
### 球员图片
- `GET /api/v1/team-player-images/` - 获取所有球员图片列表
- `GET /api/v1/team-player-images/{id}/` - 获取特定球员图片信息
### 球队HTML数据文件
- `GET /api/v1/team-data-html/` - 获取所有球队HTML数据文件列表
- `GET /api/v1/team-data-html/{id}/` - 获取特定球队的HTML数据文件信息
## 过滤和搜索
所有端点都支持以下过滤和搜索功能:
### 过滤
- `team={team_id}` - 按球队ID过滤
- `position={position}` - 按位置过滤(仅球员)
- `nationality={nationality}` - 按国籍过滤(仅球员)
### 搜索
- `search={query}` - 按名称搜索
- 球员端点:按球员名、球队名、位置、国籍搜索
- 球员图片端点:按球员名搜索
## 使用示例
### 获取球队列表
```bash
curl http://localhost:8000/api/v1/teams/
```
### 获取特定球队的所有球员
```bash
curl http://localhost:8000/api/v1/players/?team=1
```
### 获取球员图片路径
```bash
curl http://localhost:8000/api/v1/team-player-images/1/
```
返回示例:
```json
{
"id": 1,
"team": 1,
"team_name": "Arsenal",
"player_name": "Bukayo Saka",
"image_path": "static/team_player_images/Arsenal/Bukayo_Saka.jpg"
}
```
### 获取球队可视化文件列表
```bash
curl http://localhost:8000/api/v1/team-visuals/1/
```
返回示例:
```json
{
"id": 1,
"team": 1,
"team_name": "Arsenal",
"visual_files": [
{
"name": "age_distribution.png",
"file_path": "static/team-visuals/Arsenal/age_distribution.png"
},
// ... 其他文件
]
}
```