# notice **Repository Path**: xiabingyang/notice ## Basic Information - **Project Name**: notice - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-20 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 消息通知系统 一个基于 Golang 服务端和 Flutter 客户端的实时消息通知系统,支持用户登录、群组管理、实时消息和 Webhook 推送功能。 ## 功能特性 - 用户注册和登录 - 实时消息收发 - 群组创建和管理 - Webhook 推送到指定群组 - WebSocket 实时通信 - 数据持久化存储 ## 项目结构 ``` notice/ ├── server/ # Golang 服务端 │ ├── internal/ │ │ ├── handlers/ # HTTP 处理器 │ │ ├── models/ # 数据模型 │ │ ├── middleware/ # 中间件 │ │ ├── services/ # 业务逻辑 │ │ └── database/ # 数据库初始化 │ ├── go.mod │ └── main.go └── client/ # Flutter 客户端 ├── lib/ │ ├── models/ # 数据模型 │ ├── services/ # API 和 WebSocket 服务 │ ├── providers/ # 状态管理 │ └── screens/ # 页面 └── pubspec.yaml ``` ## 服务端配置 ### 安装依赖 ```bash cd server go mod download ``` ### 启动服务 ```bash go run main.go ``` 服务默认运行在 `http://localhost:8080` ### API 端点 #### 认证接口 - `POST /api/auth/register` - 用户注册 - `POST /api/auth/login` - 用户登录 #### 群组接口 - `GET /api/groups` - 获取群组列表 - `POST /api/groups` - 创建群组 - `POST /api/groups/:id/join` - 加入群组 - `GET /api/groups/:id/messages` - 获取群组消息 #### 消息接口 - `GET /api/messages` - 获取私聊消息 #### Webhook 接口 - `POST /api/webhook/:token` - Webhook 推送 #### WebSocket - `GET /ws?user_id=xxx` - WebSocket 连接 ### Webhook 使用示例 使用群组的 webhook_key 推送消息到群组: ```bash curl -X POST http://localhost:8080/api/webhook/YOUR_WEBHOOK_KEY \ -H "Content-Type: application/json" \ -d '{ "title": "通知标题", "content": "通知内容", "from": "发送者名称" }' ``` ## 客户端配置 ### 安装依赖 ```bash cd client flutter pub get ``` ### 启动应用 ```bash flutter run ``` ### 使用说明 1. 打开应用后,首先进行注册或登录 2. 登录后可以看到群组列表 3. 点击右下角的 `+` 按钮创建新群组 4. 点击群组进入聊天界面发送和接收消息 5. 在群组列表中点击二维码图标可以查看 Webhook Key ### 修改服务器地址 如果需要修改服务器地址,请编辑 `client/lib/services/api_service.dart`: ```dart static const String baseUrl = 'http://your-server-ip:8080/api'; ``` 同时修改 `client/lib/services/websocket_service.dart`: ```dart final uri = Uri.parse('ws://your-server-ip:8080/ws?user_id=$userId'); ``` ## 数据库 项目使用 SQLite 数据库,数据库文件 `notice.db` 会在服务端首次运行时自动创建。 ## 技术栈 ### 服务端 - Gin Web Framework - GORM (ORM) - Gorilla WebSocket - JWT 认证 - SQLite 数据库 ### 客户端 - Flutter - Provider 状态管理 - HTTP 客户端 - WebSocket 通信 - SharedPreferences 本地存储 ## 开发注意事项 1. 生产环境请修改 JWT 密钥(在 `server/internal/middleware/auth.go` 中) 2. 生产环境请使用安全的数据库配置 3. WebSocket 连接会自动处理重连逻辑 4. Webhook Key 在创建群组时自动生成,每个群组唯一 ## 故障排除 ### 服务端无法启动 - 检查端口 8080 是否被占用 - 确保 Go 依赖已正确安装 ### 客户端无法连接 - 确保服务端正在运行 - 检查服务器地址配置是否正确 - 检查防火墙设置 ### 消息无法发送 - 确保已登录 - 检查 WebSocket 连接状态 - 查看服务端日志