Files
lv8girl/README.md
2026-02-23 23:50:04 +08:00

255 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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