首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,370 @@
|
||||
# Resume Platform · 智能简历平台
|
||||
|
||||
[](https://go.dev/)
|
||||
[](https://gin-gonic.com/)
|
||||
[](https://www.sqlite.org/)
|
||||
[](LICENSE)
|
||||
[](#贡献指南)
|
||||
|
||||
> 基于 Go + Gin + SQLite 的现代化开源简历平台,内置 AI 面试助手、多模板支持、多人简历管理,让你的个人主页脱颖而出。
|
||||
|
||||
---
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
### 📄 简历管理
|
||||
- **多人简历支持** — 每个人独立访问路由(如 `/zhangsan`、`/lisi`),支持人员绑定与解绑
|
||||
- **多模板主题** — 内置 7 种精美模板(modern / classic / fresh / minimalist / professional / tech / project)
|
||||
- **实时编辑** — 所见即所得的编辑体验,自动保存防止丢失
|
||||
- **访问密码** — 支持为简历设置独立访问密码,保护隐私
|
||||
- **数据脱敏** — 公开展示时自动脱敏手机号、邮箱等敏感信息
|
||||
|
||||
### 🤖 AI 智能面试
|
||||
- **智能出题** — 基于简历内容或关键词自动生成面试题,支持选择题、填空题、简答题、算法题
|
||||
- **多 AI 提供商** — 接入 DeepSeek / 豆包 / 讯飞星火 / 通义千问,自由切换
|
||||
- **关键词驱动** — 智能提取简历技能作为关键词,支持别名扩展,每次生成随机不重复
|
||||
- **答题记录** — 完整记录每次答题情况,支持查看历史、重练错题
|
||||
- **收藏 & 错题本** — 一键收藏好题,错题自动入库,针对性复习
|
||||
|
||||
### 🎨 作品集展示
|
||||
- **独立作品集页** — 每个用户拥有专属作品集展示页面
|
||||
- **项目关联** — 支持从简历项目中导入,也可独立创建
|
||||
- **分类筛选** — 按技术栈、类型快速筛选项目
|
||||
- **首页精选** — 可设置首页展示的精选项目
|
||||
|
||||
### 🛡️ 安全保障
|
||||
- **后台隐藏路径** — 自定义管理后台 URL,降低被探测风险
|
||||
- **登录验证码** — 图形验证码防止机器人暴力破解
|
||||
- **登录限流** — 基于 IP 的登录次数限制,超出自动锁定
|
||||
- **AES 加密** — 数据库支持 AES-GCM 加密存储,敏感数据更安全
|
||||
- **PBKDF2 密钥派生** — 使用 PBKDF2-SHA256 派生加密密钥
|
||||
|
||||
### 📊 管理后台
|
||||
- **仪表盘** — 数据总览,快速了解平台运行状态
|
||||
- **用户管理** — 完整的用户 CRUD,支持状态管理
|
||||
- **简历管理** — 统一管理所有简历,支持绑定/解绑人员
|
||||
- **答题管理** — 查看用户答题记录、学习进度
|
||||
- **菜单管理** — 自定义后台导航菜单
|
||||
- **系统设置** — 站点名称、Logo、SEO 等配置可视化管理
|
||||
- **全局搜索** — 一键搜索用户、简历、作品集
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 技术栈
|
||||
|
||||
| 类别 | 技术 | 版本 |
|
||||
|------|------|------|
|
||||
| 语言 | Go | 1.25+ |
|
||||
| Web 框架 | Gin | v1.9.1 |
|
||||
| 数据库 | SQLite (modernc.org/sqlite) | v1.26.0 |
|
||||
| AI Agent | CloudWeGo Eino | v0.9.12 |
|
||||
| 配置管理 | Viper | v1.18.2 |
|
||||
| 验证码 | base64Captcha | v1.3.2 |
|
||||
| 前端 | HTML Template + Tailwind CSS + Font Awesome | — |
|
||||
| 部署 | Docker / Docker Compose | — |
|
||||
|
||||
---
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
```
|
||||
resume-platform/
|
||||
├── cmd/
|
||||
│ ├── server/ # 主服务入口
|
||||
│ │ └── main.go
|
||||
│ └── checkdb/ # 数据库检查工具
|
||||
│ └── main.go
|
||||
├── config/
|
||||
│ └── config.yaml # 应用配置文件
|
||||
├── internal/
|
||||
│ ├── agent/ # AI Agent 层(Eino)
|
||||
│ │ ├── config.go
|
||||
│ │ └── tools.go # 题目生成、答案解析等工具
|
||||
│ ├── ai/ # AI 提供商适配层
|
||||
│ │ ├── provider.go # 统一接口定义
|
||||
│ │ ├── deepseek.go
|
||||
│ │ ├── doubao.go
|
||||
│ │ ├── spark.go
|
||||
│ │ └── tongyi.go
|
||||
│ ├── handler/ # HTTP 处理器
|
||||
│ │ ├── admin.go # 管理后台
|
||||
│ │ ├── ai.go # AI 相关接口
|
||||
│ │ ├── chat.go # AI 对话接口
|
||||
│ │ ├── document.go # 文档解析接口
|
||||
│ │ ├── response.go # 统一响应格式
|
||||
│ │ └── resume.go # 简历/作品集/答题 API
|
||||
│ ├── model/ # 数据模型
|
||||
│ │ ├── resume.go # 简历、用户、题目、作品集等
|
||||
│ │ └── document.go
|
||||
│ ├── parser/ # 简历解析
|
||||
│ │ └── parser.go
|
||||
│ ├── repository/ # 数据访问层
|
||||
│ │ ├── interface.go # 仓库接口定义
|
||||
│ │ └── sqlite.go # SQLite 实现
|
||||
│ ├── router/ # 路由配置
|
||||
│ │ ├── router.go # 路由总入口
|
||||
│ │ ├── admin.go # 管理后台路由
|
||||
│ │ ├── api.go # REST API 路由
|
||||
│ │ └── frontend.go # 前端页面路由
|
||||
│ ├── security/ # 安全模块
|
||||
│ │ ├── captcha.go # 验证码
|
||||
│ │ └── rate_limiter.go # 登录限流
|
||||
│ └── service/ # 业务逻辑层
|
||||
│ ├── ai_service.go # AI 服务
|
||||
│ ├── chat.go # 对话服务
|
||||
│ ├── document.go # 文档服务
|
||||
│ ├── resume.go # 简历服务
|
||||
│ └── vector.go # 向量服务
|
||||
├── pkg/
|
||||
│ └── config/ # 公共配置包
|
||||
│ └── config.go
|
||||
├── static/ # 静态资源
|
||||
│ ├── images/
|
||||
│ └── js/
|
||||
├── templates/ # HTML 模板
|
||||
│ ├── admin/ # 管理后台模板
|
||||
│ └── web/ # 前端展示模板
|
||||
├── data/ # 数据库文件(运行时生成)
|
||||
├── logs/ # 日志文件(运行时生成)
|
||||
├── Dockerfile
|
||||
├── docker-compose.yml
|
||||
├── go.mod
|
||||
└── go.sum
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 环境要求
|
||||
|
||||
- **Go 1.25+**(推荐使用最新稳定版)
|
||||
- 或 **Docker** / **Docker Compose**
|
||||
|
||||
### 本地运行
|
||||
|
||||
```bash
|
||||
# 1. 克隆项目
|
||||
git clone https://github.com/yourusername/resume-platform.git
|
||||
cd resume-platform
|
||||
|
||||
# 2. 安装依赖
|
||||
go mod download
|
||||
|
||||
# 3. 运行服务
|
||||
go run cmd/server/main.go
|
||||
```
|
||||
|
||||
服务启动后:
|
||||
|
||||
| 地址 | 说明 |
|
||||
|------|------|
|
||||
| http://localhost:8090 | 产品首页 |
|
||||
| http://localhost:8090/default | 默认简历示例 |
|
||||
| http://localhost:8090/my-secret-admin-123 | 管理后台(默认路径) |
|
||||
|
||||
> **默认账号**:`admin` / `admin123456`
|
||||
>
|
||||
> ⚠️ 生产环境请务必修改默认密码和后台路径!
|
||||
|
||||
### Docker 部署
|
||||
|
||||
#### 使用 Docker Compose(推荐)
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### 手动构建
|
||||
|
||||
```bash
|
||||
docker build -t resume-platform .
|
||||
docker run -d \
|
||||
-p 8090:8090 \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-v $(pwd)/logs:/app/logs \
|
||||
--name resume-platform \
|
||||
resume-platform
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 配置说明
|
||||
|
||||
配置文件位于 `config/config.yaml`,所有配置项均支持通过环境变量覆盖。
|
||||
|
||||
```yaml
|
||||
server:
|
||||
host: "0.0.0.0" # 监听地址
|
||||
port: 8090 # 监听端口
|
||||
mode: "release" # Gin 模式:debug / release
|
||||
|
||||
database:
|
||||
type: "sqlite" # 数据库类型(目前仅支持 SQLite)
|
||||
path: "./data/resume.db" # 数据库文件路径
|
||||
password: "resume@2024" # 数据库加密密码
|
||||
|
||||
auth:
|
||||
enabled: true # 是否启用后台认证
|
||||
username: "admin" # 管理员用户名
|
||||
password: "admin123456" # 管理员密码
|
||||
admin_path: "/my-secret-admin-123" # 后台路径(建议修改)
|
||||
max_login_attempts: 5 # 最大登录尝试次数
|
||||
lockout_duration: 15 # 锁定时长(分钟)
|
||||
|
||||
template:
|
||||
default: "modern" # 默认简历模板
|
||||
|
||||
log:
|
||||
level: "info" # 日志级别
|
||||
output: "./logs/app.log" # 日志输出路径
|
||||
|
||||
ai:
|
||||
provider: "spark" # AI 提供商:spark / tongyi / doubao / deepseek
|
||||
enabled: true # 是否启用 AI 功能
|
||||
spark: # 讯飞星火配置
|
||||
api_password: ""
|
||||
base_url: ""
|
||||
model: "lite"
|
||||
max_tokens: 1024
|
||||
timeout: 30
|
||||
# 其他 AI 提供商配置...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔌 API 概览
|
||||
|
||||
### 简历接口
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/resume/:id` | 获取单份简历 |
|
||||
| `GET` | `/api/resume/by-route/:route` | 按路由获取简历 |
|
||||
| `POST` | `/api/resume` | 创建简历 |
|
||||
| `PUT` | `/api/resume/:id` | 更新简历 |
|
||||
| `DELETE` | `/api/resume/:id` | 删除简历 |
|
||||
| `GET` | `/api/user/resumes` | 获取指定用户的简历列表 |
|
||||
|
||||
### AI 答题接口
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `POST` | `/api/ai/agent/generate-questions` | 生成面试题 |
|
||||
| `POST` | `/api/ai/agent/submit-answers` | 提交答案并评分 |
|
||||
| `POST` | `/api/ai/agent/evaluate-answers` | 评估答案 |
|
||||
|
||||
### 收藏 & 错题
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `POST` | `/api/favorite` | 添加收藏/错题 |
|
||||
| `GET` | `/api/favorite` | 获取收藏/错题列表 |
|
||||
| `DELETE` | `/api/favorite/:id` | 删除收藏/错题 |
|
||||
| `PUT` | `/api/favorite/:id/toggle` | 切换收藏状态 |
|
||||
|
||||
### 作品集接口
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/portfolio` | 获取作品集列表 |
|
||||
| `POST` | `/api/portfolio` | 创建作品集项目 |
|
||||
| `GET` | `/api/portfolio/:id` | 获取单个项目 |
|
||||
| `PUT` | `/api/portfolio/:id` | 更新项目 |
|
||||
| `DELETE` | `/api/portfolio/:id` | 删除项目 |
|
||||
|
||||
### 管理后台
|
||||
|
||||
所有管理接口前缀为 `{admin_path}/`(默认 `/my-secret-admin-123/`)。
|
||||
|
||||
---
|
||||
|
||||
## 🧩 模板系统
|
||||
|
||||
内置 7 种精美模板,支持随时切换:
|
||||
|
||||
| 模板 | 风格 | 适用场景 |
|
||||
|------|------|----------|
|
||||
| `modern` | 现代简约 | 通用型,推荐首选 |
|
||||
| `classic` | 经典商务 | 传统行业、资深岗位 |
|
||||
| `fresh` | 清新活力 | 应届生、设计岗 |
|
||||
| `minimalist` | 极简主义 | 追求简洁表达 |
|
||||
| `professional` | 专业职业 | 管理岗、专业岗 |
|
||||
| `tech` | 技术导向 | 程序员、工程师 |
|
||||
| `project` | 项目展示 | 突出项目经验 |
|
||||
|
||||
> 模板文件位于 `templates/web/`,可基于现有模板自定义新主题。
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 开发指南
|
||||
|
||||
### 添加新模板
|
||||
|
||||
1. 在 `templates/web/` 目录下创建 `your-template.html`
|
||||
2. 继承 `base.html` 的结构,使用 Go 模板语法访问 `.Resume` 数据
|
||||
3. 在 `resume.Template` 字段设置模板名称即可
|
||||
|
||||
### 添加新的 AI 提供商
|
||||
|
||||
1. 在 `internal/ai/` 下创建 `yourprovider.go`
|
||||
2. 实现 `AIProvider` 接口
|
||||
3. 在 `provider.go` 的 `NewProvider` 工厂中注册
|
||||
|
||||
### 数据库迁移
|
||||
|
||||
项目使用 `CREATE TABLE IF NOT EXISTS` + `migrateSchema` 机制自动处理表结构变更。新增列时在 `migrateSchema` 函数中添加对应 `ALTER TABLE ADD COLUMN` 语句即可,程序启动时自动执行。
|
||||
|
||||
### 代码规范
|
||||
|
||||
```bash
|
||||
# 格式化代码
|
||||
gofmt -w .
|
||||
|
||||
# 静态检查
|
||||
go vet ./...
|
||||
|
||||
# 构建检查
|
||||
go build ./...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🤝 贡献指南
|
||||
|
||||
欢迎提交 Issue 和 Pull Request!
|
||||
|
||||
### 贡献流程
|
||||
|
||||
1. **Fork** 本仓库
|
||||
2. 创建特性分支:`git checkout -b feature/AmazingFeature`
|
||||
3. 提交更改:`git commit -m 'Add some AmazingFeature'`
|
||||
4. 推送到分支:`git push origin feature/AmazingFeature`
|
||||
5. 打开 **Pull Request**
|
||||
|
||||
### 提交规范
|
||||
|
||||
- 使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范
|
||||
- 示例:`feat: add dark mode support`、`fix: correct user binding display`
|
||||
|
||||
---
|
||||
|
||||
## 📜 开源协议
|
||||
|
||||
本项目基于 **MIT License** 开源,详见 [LICENSE](LICENSE) 文件。
|
||||
|
||||
---
|
||||
|
||||
## ⭐ 支持项目
|
||||
|
||||
如果这个项目对你有帮助,欢迎:
|
||||
|
||||
- 点个 Star ⭐️ 让更多人看到
|
||||
- 分享给身边需要的朋友
|
||||
- 提交 Issue / PR 一起完善
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<p>Made with ❤️ by Resume Platform Team</p>
|
||||
</div>
|
||||
Reference in New Issue
Block a user