{"id":18068997,"url":"https://github.com/away0x/gin_bbs","last_synced_at":"2025-05-12T15:00:22.472Z","repository":{"id":37703974,"uuid":"184374207","full_name":"Away0x/gin_bbs","owner":"Away0x","description":"Gin BBS App","archived":false,"fork":false,"pushed_at":"2023-01-03T20:47:17.000Z","size":29784,"stargazers_count":169,"open_issues_count":72,"forks_count":42,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-31T23:36:11.678Z","etag":null,"topics":["gin","go","golang","gorm","sass","typescript","vue"],"latest_commit_sha":null,"homepage":"http://www.frontendgo.com:8889","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Away0x.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-01T05:42:56.000Z","updated_at":"2025-03-24T11:39:00.000Z","dependencies_parsed_at":"2023-02-01T10:01:38.834Z","dependency_job_id":null,"html_url":"https://github.com/Away0x/gin_bbs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Away0x%2Fgin_bbs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Away0x%2Fgin_bbs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Away0x%2Fgin_bbs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Away0x%2Fgin_bbs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Away0x","download_url":"https://codeload.github.com/Away0x/gin_bbs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253761644,"owners_count":21960190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gin","go","golang","gorm","sass","typescript","vue"],"created_at":"2024-10-31T08:08:31.522Z","updated_at":"2025-05-12T15:00:22.310Z","avatar_url":"https://github.com/Away0x.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gin BBS App\n\n- [访问地址](http://www.frontendgo.com:8889)\n\n## 项目目录结构\n\u003cdetails\u003e\n\u003csummary\u003e展开查看\u003c/summary\u003e\n\u003cpre\u003e\u003ccode\u003e\n├── app              项目核心逻辑代码\n│    ├── controllers 控制器\n│    ├── models      模型\n│    ├── auth        用户相关\n│    ├── cache       缓存\n│    ├── cron        定时任务\n│    ├── helpers     帮助方法\n│    ├── policies    权限\n│    ├── requests    参数验证\n│    ├── services    复杂查询\n│    └── viewmodels  数据转换\n│\n├── bootstrap        各组件初始化\n│\n├── config           配置中心\n│\n├── database         数据库\n│    └── factory     数据 mock\n│\n├── pkg              项目依赖\n│\n├── public           项目静态文件\n│\n├── docs             swagger api doc\n│\n├── test             测试文件\n│\n├── resources        前端源码\n│    └── view        go 模板文件\n│\n├── routes           路由\n│    └── middleware  中间件\n│    └── routes.go   路由注册\n│    └── api.go      api 路由注册\n│    └── web.go      页面路由注册\n│\n├── storage          存放日志等文件\n│\n├── main.go          项目入口\n│\n├── config.yaml      项目配置\n│\n├── deploy.sh        部署脚本\n│\n├── Makefile         Makefile 文件\n│\n├── vue-admin-app    vue 管理员后台前端源码\n│\n├── taro-app         taro web app 源码(小程序 ... 端)\n│\n└── flutter_app      flutter app 源码(Android iOS 端)\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/details\u003e\n\n## 启动\n```\n# 需先安装 fresh (https://github.com/gravityblast/fresh)\n# go get github.com/pilu/fresh\n\n# 启动前建议配置环境变量: GOPROXY=https://goproxy.io\n\ncd gin_bbs\ncp ./config.example.yaml ./config.yaml\nmake dev # 或者也可直接 fresh -c ./fresh.conf\n# 项目相关命令参见 Makefile\n```\n\n数据库配置需要修改 `config.yaml`：\n```\nDB:\n  CONNECTION: mysql\n  HOST: 127.0.0.1\n  PORT: 3306\n  DATABASE: gin_bbs\n  USERNAME: your_username\n  PASSWORD: your_password\n```\n如果运行的是 debug 模式，数据库名应该为 `gin_bbs_debug`。\n\n## 实现功能\n- [x] CSRF 验证\n- [x] flash 消息闪现\n- [x] 记忆上次表单提交的数据\n- [x] 参数校验模块\n- [x] 命名路由\n- [x] 分页\n- [x] 发送邮件\n- [x] 用户权限模块\n- [x] 日志\n- [x] 前端构建 (typescript、sass ...)\n- [x] 验证码\n- [x] pongo2 template\n- [x] 文件上传\n- [x] 发送短信\n- [x] 微信登录\n- [x] swagger api 文档\n- [x] JWT (刷新、黑名单)\n- [x] 接口测试\n- [x] 推送\n- [ ] vue 管理员后台系统\n- [ ] taro web 移动端 (小程序 ... 端)\n- [ ] flutter 移动端 app (Android iOS 端)\n\n\n### 角色\n角色的权限从低到高，高权限的用户将包含权限低的用户权限\n\n- 游客 —— 没有登录的用户\n- 用户 —— 注册用户，没有多余权限\n- 管理员 —— 辅助超级管理员做社区内容管理\n- 站长 —— 权限最高的用户角色\n\n### 信息结构\n- 用户 —— 模型名称 User，论坛为 UGC 产品，所有内容都围绕用户来进行\n- 话题 —— 模型名称 Topic，LaraBBS 论坛应用的最核心数据，有时我们称为帖子\n- 分类 —— 模型名称 Category，话题的分类，每一个话题必须对应一个分类，分类由管理员创建\n- 回复 —— 模型名称 Reply，针对某个话题的讨论，一个话题下可以有多个回复\n\n### 用例\n#### 1. 游客\n- 游客可以查看所有话题列表\n- 游客可以查看某个分类下的所有话题列表\n- 游客可以按照发布时间和最后回复时间进行话题列表排序\n- 游客可以查看单个话题内容\n- 游客可以查看话题的所有回复\n- 游客可以通过注册按钮创建用户（用户注册，游客专属）\n- 游客可以查看用户的个人页面\n\n#### 2. 用户\n- 用户可以在某个分类下发布话题\n- 用户可以编辑自己发布的话题\n- 用户可以删除自己发布的话题\n- 用户可以回复所有话题\n- 用户可以删除自己的回复\n- 用户可以编辑自己的个人资料\n- 用户可以接收话题新回复的通知\n\n#### 3. 管理员\n- 管理员可以访问后台\n- 管理员可以编辑所有的话题\n- 管理员可以删除所有的回复\n- 管理员可以编辑分类\n\n#### 4. 站长\n- 站长可以编辑用户\n- 站长可以删除用户\n- 站长可以修改站点设置\n- 站长可以删除分类\n\n***\n\n![1](readme/1.png)\n\n![2](readme/2.png)\n\n![3](readme/3.png)\n\n![4](readme/4.png)\n\n![5](readme/5.png)\n\n![6](readme/6.png)\n\n![7](readme/7.png)\n\n![8](readme/8.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faway0x%2Fgin_bbs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faway0x%2Fgin_bbs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faway0x%2Fgin_bbs/lists"}