# 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 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