lv8girl!
This commit is contained in:
254
README.md
Normal file
254
README.md
Normal 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
|
||||
Reference in New Issue
Block a user