This commit is contained in:
2026-02-23 23:50:04 +08:00
commit 084d3b0faf
45 changed files with 4090 additions and 0 deletions

254
README.md Normal file
View File

@@ -0,0 +1,254 @@
# lv8girl - 绿坝娘二次元论坛
一个基于 Go + Gin + SQLite 构建的二次元社区论坛系统。
## 项目概述
lv8girl 是一个功能完整的社区论坛系统,支持用户注册登录、帖子发布审核、评论点赞、私信系统和管理后台等功能。
## 技术栈
- **语言**: Go 1.21+
- **Web框架**: Gin
- **数据库**: SQLite (使用 glebarez/sqlite 纯Go实现无需CGO)
- **ORM**: GORM
- **会话管理**: gin-sessions
## 目录结构
```
lv8girl/
├── cmd/
│ └── server/
│ └── main.go # 程序入口文件
├── internal/ # 私有应用代码
│ ├── config/ # 配置管理
│ │ └── config.go # 应用配置定义
│ │
│ ├── controllers/ # 控制器层 - 处理HTTP请求
│ │ ├── admin.go # 管理后台控制器
│ │ ├── auth.go # 认证控制器(登录/注册/登出)
│ │ ├── discussion.go # 帖子发布控制器
│ │ ├── home.go # 首页/帖子详情控制器
│ │ ├── message.go # 私信控制器
│ │ └── user.go # 用户资料控制器
│ │
│ ├── middleware/ # 中间件
│ │ └── auth.go # 认证中间件(登录检查/管理员检查)
│ │
│ ├── models/ # 数据模型定义
│ │ └── models.go # User, Discussion, Comment, Like, PrivateMessage
│ │
│ ├── repositories/ # 数据访问层 - 数据库操作
│ │ ├── db.go # 数据库初始化
│ │ ├── comment.go # 评论数据访问
│ │ ├── discussion.go # 帖子数据访问
│ │ ├── like.go # 点赞数据访问
│ │ ├── message.go # 私信数据访问
│ │ └── user.go # 用户数据访问
│ │
│ ├── routes/ # 路由配置
│ │ └── routes.go # 所有路由定义
│ │
│ ├── services/ # 业务逻辑层
│ │ ├── admin.go # 管理业务逻辑
│ │ ├── auth.go # 认证业务逻辑
│ │ ├── discussion.go # 帖子业务逻辑
│ │ ├── message.go # 私信业务逻辑
│ │ └── user.go # 用户业务逻辑
│ │
│ └── utils/ # 工具函数
│ └── utils.go # 通用工具函数
├── templates/ # HTML模板文件
│ ├── index.html # 首页
│ ├── login.html # 登录页
│ ├── register.html # 注册页
│ ├── post.html # 帖子详情页
│ ├── post_discussion.html # 发帖页
│ ├── profile.html # 用户资料页
│ ├── messages.html # 私信列表页
│ ├── send_message.html # 发送私信页
│ ├── admin_dashboard.html # 管理后台-仪表盘
│ ├── admin_pending_posts.html # 管理后台-待审核帖子
│ ├── admin_pending_users.html # 管理后台-待审核用户
│ ├── admin_posts.html # 管理后台-帖子管理
│ ├── admin_users.html # 管理后台-用户管理
│ └── admin_comments.html # 管理后台-评论管理
├── static/ # 静态资源(CSS/JS)
├── uploads/ # 用户上传文件
│ ├── avatars/ # 用户头像
│ └── posts/ # 帖子图片
├── data/ # 数据库文件目录
│ └── lv8girl.db # SQLite数据库
├── go.mod # Go模块定义
├── go.sum # 依赖校验文件
├── Dockerfile # Docker构建文件
├── compose.yaml # Docker Compose配置
└── README.md # 项目说明文档
```
## 架构设计
项目采用分层架构,职责分离清晰:
```
请求 → 路由(Routes) → 中间件(Middleware) → 控制器(Controllers) → 服务(Services) → 仓库(Repositories) → 数据库
```
### 各层职责
| 层级 | 职责 | 示例 |
|------|------|------|
| Routes | 定义URL路由规则绑定控制器方法 | `r.GET("/", homeCtrl.Index)` |
| Middleware | 请求预处理(认证、权限检查等) | `AuthRequired()`, `AdminRequired()` |
| Controllers | 处理HTTP请求参数验证调用Service | 解析表单数据返回HTML/JSON |
| Services | 业务逻辑处理,事务管理 | 用户注册流程,帖子审核流程 |
| Repositories | 数据库CRUD操作 | `FindByID`, `Create`, `Update` |
| Models | 数据结构定义 | `User`, `Discussion` 结构体 |
## 功能特性
### 用户功能
- 用户注册(需管理员审核)
- 用户登录/登出
- 个人资料页
- 头像上传
### 帖子功能
- 发布帖子(支持图片上传,需审核)
- 帖子列表浏览
- 帖子详情查看
- 点赞功能
- 评论功能
### 私信功能
- 发送私信
- 私信列表
- 未读消息提示
### 管理后台
- 仪表盘统计
- 用户审核管理
- 帖子审核管理
- 用户角色管理
- 评论管理
## 快速开始
### 本地运行
```bash
# 克隆项目
git clone <repository-url>
cd lv8girl
# 下载依赖
go mod tidy
# 运行
go run ./cmd/server
```
访问 http://localhost:8080
### Docker运行
```bash
# 构建并运行
docker-compose up --build
```
## 默认账号
管理员账号:
- 用户名: `admin`
- 密码: `admin123`
## 配置说明
配置文件位于 `internal/config/config.go`
```go
type Config struct {
Server ServerConfig // 服务端口等
Database DatabaseConfig // 数据库路径
Session SessionConfig // 会话密钥
App AppConfig // 应用名称版本
}
```
## 数据库模型
### User (用户)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | uint | 主键 |
| username | string | 用户名 |
| email | string | 邮箱 |
| password_hash | string | 密码哈希 |
| avatar | string | 头像路径 |
| role | string | 角色(user/admin/banned) |
| status | string | 状态(pending/approved/rejected) |
| last_active | time | 最后活动时间 |
### Discussion (帖子)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | uint | 主键 |
| user_id | uint | 作者ID |
| title | string | 标题 |
| content | text | 内容 |
| image_path | string | 图片路径 |
| status | string | 状态(pending/approved/rejected) |
| views | int | 浏览量 |
### Comment (评论)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | uint | 主键 |
| post_id | uint | 帖子ID |
| user_id | uint | 评论者ID |
| content | text | 内容 |
### Like (点赞)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | uint | 主键 |
| post_id | uint | 帖子ID |
| user_id | uint | 用户ID |
### PrivateMessage (私信)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | uint | 主键 |
| from_user_id | uint | 发送者ID |
| to_user_id | uint | 接收者ID |
| content | text | 内容 |
| is_read | bool | 是否已读 |
## 开发指南
### 添加新功能
1.`models/` 添加数据模型
2.`repositories/` 添加数据访问方法
3.`services/` 添加业务逻辑
4.`controllers/` 添加控制器
5.`routes/` 注册路由
6.`templates/` 添加模板
### 代码规范
- 遵循 Go 命名规范
- 每个包有明确的职责
- 错误要妥善处理
- 敏感信息不要硬编码
## 许可证
MIT License