首次提交:初始化项目代码

This commit is contained in:
sunct
2026-07-31 14:44:48 +08:00
commit a4fe393571
119 changed files with 29105 additions and 0 deletions
+370
View File
@@ -0,0 +1,370 @@
# Resume Platform · 智能简历平台
[![Go Version](https://img.shields.io/badge/Go-1.25+-00ADD8?style=flat-square&logo=go)](https://go.dev/)
[![Gin](https://img.shields.io/badge/Gin-1.9.1-00ADD8?style=flat-square)](https://gin-gonic.com/)
[![SQLite](https://img.shields.io/badge/SQLite-3.x-003B57?style=flat-square&logo=sqlite)](https://www.sqlite.org/)
[![License](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](#贡献指南)
> 基于 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>