# 学习信息后台接口 总设计

> API-ADMIN-INFO-000 | v1.0 | 2026-06-09

## 1. 概述

基于 M8 核心数据表（ReadingEvent / LearningSession / MaterialReadingProgress / DailyLearningActivity / LearningRecord / TemporaryReadingMaterial），为 Admin Dashboard 提供管理查询、诊断、操作接口。

### 路由前缀

```
/admin/learning/*
```

### 鉴权

- 所有接口需要 `AdminJwtGuard`
- 角色要求：`ADMIN` 或 `SUPER_ADMIN`
- 审计日志记录操作人和时间

## 2. 接口总览

### 查询接口

| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/admin/learning/dashboard` | Dashboard 概览 |
| GET | `/admin/learning/reading-events` | ReadingEvent 列表/详情 |
| GET | `/admin/learning/reading-events/:id` | ReadingEvent 详情 |
| GET | `/admin/learning/reading-events/failed` | 失败/警告/重复事件 |
| GET | `/admin/learning/sessions` | LearningSession 列表 |
| GET | `/admin/learning/sessions/:id` | LearningSession 详情 |
| GET | `/admin/learning/progress` | MaterialReadingProgress 列表 |
| GET | `/admin/learning/progress/:id` | 资料进度详情 |
| GET | `/admin/learning/daily-activities` | DailyLearningActivity 列表 |
| GET | `/admin/learning/records` | LearningRecord 列表 |
| GET | `/admin/learning/records/:id` | LearningRecord 详情 |
| GET | `/admin/learning/user-timeline?userId=` | 用户学习时间线 |
| GET | `/admin/learning/user-diagnose?userId=` | 单用户诊断 |
| GET | `/admin/learning/material-diagnose?materialId=` | 单资料诊断 |
| GET | `/admin/learning/anomalies` | 异常数据查询 |
| GET | `/admin/learning/sessions/interrupted` | 中断 session 列表 |
| GET | `/admin/learning/temporary-materials` | 临时资料列表 |

### 操作接口

| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/admin/learning/reading-events/:id/reprocess` | 重处理单事件 |
| POST | `/admin/learning/reading-events/reprocess-batch` | 批量重处理 |
| POST | `/admin/learning/recalculate` | 重算学习数据 |
| GET | `/admin/learning/export` | 导出学习数据 |
| PUT | `/admin/learning/event-config` | 事件处理配置 |

## 3. 分页/筛选/排序规范

```typescript
interface PaginationQuery {
  page?: number;       // default 1
  limit?: number;      // default 20, max 100
  sortBy?: string;     // 排序字段
  order?: 'asc' | 'desc';  // default desc
}

interface EventFilter extends PaginationQuery {
  userId?: string;
  materialId?: string;
  readingTargetType?: string;
  eventType?: string;
  status?: string;
  startDate?: string;
  endDate?: string;
}
```

## 4. Dashboard 数据结构

```typescript
interface AdminDashboard {
  overview: {
    totalEvents: number;
    todayEvents: number;
    failedEvents: number;
    duplicateEvents: number;
  };
  sessions: {
    active: number;
    interrupted: number;
    completed: number;
    total: number;
  };
  users: {
    activeToday: number;
    totalWithEvents: number;
  };
  materials: {
    totalRead: number;
    totalMarkedRead: number;
  };
}
```

## 5. 审计日志

每个管理操作记录：
- `action`: 操作类型 (READ/WRITE/DELETE/EXPORT)
- `resource`: 资源路径
- `adminId`: 操作人
- `timestamp`: 时间
- `details`: 详情（查询参数/操作结果摘要）

## 6. 错误码

| 码 | 含义 |
|----|------|
| `ADMIN_ACCESS_DENIED` | 非管理员 |
| `INVALID_DATE_RANGE` | 日期范围无效 |
| `EXPORT_LIMIT_EXCEEDED` | 导出超限 |
| `RECALCULATE_IN_PROGRESS` | 重算进行中 |
