266 lines
6.3 KiB
Markdown
266 lines
6.3 KiB
Markdown
# AnKao Web 项目
|
||
|
||
这是一个使用Go语言和Gin框架构建的Web应用项目。
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
AnKao/
|
||
├── main.go # 主程序入口
|
||
├── internal/ # 私有应用代码
|
||
│ ├── handlers/ # HTTP请求处理器
|
||
│ ├── middleware/ # 中间件
|
||
│ └── models/ # 数据模型
|
||
├── pkg/ # 公共库代码
|
||
│ └── config/ # 配置管理
|
||
├── web/ # 前端项目目录
|
||
│ ├── src/ # 源代码
|
||
│ │ ├── pages/ # 页面组件
|
||
│ │ ├── components/ # 可复用组件
|
||
│ │ └── main.tsx # 入口文件
|
||
│ ├── vite.config.ts # Vite配置(含API代理)
|
||
│ └── package.json # 前端依赖
|
||
├── go.mod # Go模块文件
|
||
├── CLAUDE.md # 开发规范文档
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 后端服务器
|
||
|
||
```bash
|
||
# 安装依赖
|
||
go mod tidy
|
||
|
||
# 运行服务器
|
||
go run main.go
|
||
```
|
||
|
||
服务器将在 `http://localhost:8080` 启动
|
||
|
||
### 前端开发服务器
|
||
|
||
```bash
|
||
# 进入前端目录
|
||
cd web
|
||
|
||
# 安装依赖 (使用 yarn)
|
||
yarn install
|
||
|
||
# 运行开发服务器
|
||
yarn dev
|
||
```
|
||
|
||
前端开发服务器将在 `http://localhost:3000` 启动
|
||
|
||
**注意**: 前端使用 Vite 代理,所有 `/api/*` 请求会自动转发到后端服务器,无需配置 CORS。
|
||
|
||
### API端点
|
||
|
||
#### 用户相关
|
||
- `POST /api/login` - 用户登录
|
||
- `POST /api/register` - 用户注册
|
||
|
||
#### 练习题相关
|
||
- `GET /api/practice/questions` - 获取练习题目列表 (支持分页和类型过滤)
|
||
- `GET /api/practice/questions/:id` - 获取指定练习题目
|
||
- `POST /api/practice/submit` - 提交练习答案 (简答题自动AI评分)
|
||
- `GET /api/practice/types` - 获取题型列表
|
||
|
||
#### 其他
|
||
- `GET /api/health` - 健康检查端点
|
||
|
||
## 开发
|
||
|
||
### 安装依赖
|
||
|
||
```bash
|
||
go mod tidy
|
||
```
|
||
|
||
### 构建
|
||
|
||
```bash
|
||
go build -o bin/server.exe main.go
|
||
```
|
||
|
||
### 运行编译后的程序
|
||
|
||
```bash
|
||
# Windows
|
||
.\bin\server.exe
|
||
|
||
# Linux/Mac
|
||
./bin/server
|
||
```
|
||
|
||
## 特性
|
||
|
||
- 基于 Gin 框架的高性能 HTTP 服务器
|
||
- 自定义日志中间件
|
||
- RESTful API 结构
|
||
- 健康检查端点
|
||
- 用户登录系统(基于PostgreSQL数据库)
|
||
- 题目练习功能
|
||
- 答题统计功能
|
||
- **AI智能评分** - 简答题使用AI进行智能评分和反馈
|
||
- React + TypeScript + Vite 前端
|
||
- Ant Design Mobile UI组件库
|
||
|
||
## 数据库配置
|
||
|
||
项目使用 PostgreSQL 数据库存储用户数据。
|
||
|
||
### 数据库连接信息
|
||
|
||
数据库配置位于 [pkg/config/config.go](pkg/config/config.go):
|
||
- 主机: pgsql.yuchat.top
|
||
- 端口: 5432
|
||
- 数据库: ankao
|
||
- 用户: postgres
|
||
|
||
### 数据库表结构
|
||
|
||
**users 表**:
|
||
- `id` - 主键
|
||
- `username` - 用户名(唯一索引)
|
||
- `password` - 密码(bcrypt加密)
|
||
- `avatar` - 头像URL
|
||
- `nickname` - 昵称
|
||
- `created_at` - 创建时间
|
||
- `updated_at` - 更新时间
|
||
- `deleted_at` - 软删除时间
|
||
|
||
**practice_questions 表**:
|
||
- `id` - 主键
|
||
- `question_id` - 题目ID(唯一索引,来自JSON数据)
|
||
- `type` - 题型(fill-in-blank/true-false/multiple-choice/multiple-selection/short-answer)
|
||
- `type_name` - 题型名称(中文)
|
||
- `question` - 题目内容
|
||
- `answer_data` - 答案数据(JSON格式)
|
||
- `options_data` - 选项数据(JSON格式,选择题使用)
|
||
- `created_at` - 创建时间
|
||
- `updated_at` - 更新时间
|
||
- `deleted_at` - 软删除时间
|
||
|
||
### 数据导入
|
||
|
||
首次运行项目需要导入练习题数据:
|
||
|
||
```bash
|
||
# 确保 practice_question_pool.json 文件在项目根目录
|
||
go run scripts/import_questions.go
|
||
```
|
||
|
||
## AI评分配置
|
||
|
||
项目使用AI对简答题进行智能评分。AI服务配置位于 [pkg/config/config.go](pkg/config/config.go):
|
||
|
||
### 默认配置
|
||
- **API地址**: https://ai.yuchat.top
|
||
- **模型**: deepseek-v3
|
||
- **评分方式**: 基于题目和标准答案,AI会给出分数(0-100)、评语和改进建议
|
||
|
||
### 环境变量配置(可选)
|
||
可以通过环境变量覆盖默认配置:
|
||
```bash
|
||
export AI_BASE_URL="你的API地址"
|
||
export AI_API_KEY="你的API密钥"
|
||
export AI_MODEL="你的模型名称"
|
||
```
|
||
|
||
### AI评分返回格式
|
||
对简答题提交答案时,响应会包含 `ai_grading` 字段:
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"correct": true,
|
||
"user_answer": "用户的答案",
|
||
"correct_answer": "标准答案",
|
||
"ai_grading": {
|
||
"score": 85,
|
||
"feedback": "答案基本正确,要点全面",
|
||
"suggestion": "可以补充一些具体的例子"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## 前端开发
|
||
|
||
前端项目位于 `web/` 目录,使用 **yarn** 作为包管理工具。
|
||
|
||
### 安装依赖
|
||
```bash
|
||
cd web
|
||
yarn install
|
||
```
|
||
|
||
### 运行开发服务器
|
||
```bash
|
||
yarn dev
|
||
```
|
||
|
||
开发服务器运行在 `http://localhost:3000`
|
||
|
||
### 构建生产版本
|
||
```bash
|
||
yarn build
|
||
```
|
||
|
||
### API代理
|
||
开发环境下,Vite已配置代理,前端 `/api/*` 请求会自动转发到 `http://localhost:8080`,无需担心CORS问题。
|
||
|
||
## 页面结构
|
||
|
||
- **登录页** (`/login`) - 用户登录和注册,支持密码可见性切换
|
||
- **首页** (`/`) - 题型选择、错题本、题目列表等功能
|
||
- **我的** (`/profile`) - 用户信息、退出登录
|
||
|
||
## 特性
|
||
|
||
### 后端特性
|
||
- 基于 Gin 框架的高性能 HTTP 服务器
|
||
- 自定义日志中间件
|
||
- RESTful API 结构
|
||
- 健康检查端点
|
||
- 用户登录和注册系统(基于PostgreSQL数据库)
|
||
- 密码bcrypt加密存储
|
||
- 练习题管理系统(236道练习题,5种题型)
|
||
- 支持分页查询和题型筛选
|
||
- **AI智能评分系统** - 使用deepseek-v3对简答题进行智能评分和反馈
|
||
|
||
### 前端特性
|
||
- React + TypeScript + Vite 技术栈
|
||
- Ant Design Mobile UI组件库
|
||
- 移动端优化,防止双指缩放
|
||
- CSS Modules 样式隔离
|
||
- 现代化的登录/注册界面
|
||
- 密码可见性切换功能
|
||
|
||
## 技术栈
|
||
|
||
### 后端
|
||
- **Go** 1.25.1
|
||
- **Gin** v1.11.0 - Web 框架
|
||
- **GORM** v1.31.1 - ORM框架
|
||
- **PostgreSQL** - 数据库
|
||
- **bcrypt** - 密码加密
|
||
- **go-openai** v1.41.2 - OpenAI SDK (用于AI评分)
|
||
|
||
### 前端
|
||
- **React** 18 - UI框架
|
||
- **TypeScript** - 类型安全
|
||
- **Vite** - 构建工具
|
||
- **Ant Design Mobile** - UI组件库
|
||
- **React Router** - 路由管理
|
||
- **Less** - CSS预处理器
|
||
- **Yarn** - 包管理工具
|
||
|
||
### 开发工具
|
||
- API代理配置(Vite)
|
||
- CSS Modules
|
||
- 清晰的项目架构,易于扩展
|