Golang 18 gin web项目实战 IM系统(7) 群组基础功能
45
2025/7/26 15:00 - 2025/7/28 23:00
2025/7/28 完成 群组基础功能:
1.创建群 2.更新群 3.加入群 4.退出群 5.搜索群 6.群成员列表 7.群公告增删改查 8.群成员禁言 9.群管理员设置10.群主转移11.群禁言
都是些基础功能,无特殊代码,就是使用接口后开发繁杂°上升了,老是找不到文件。
表
群组 Struct
package model
import (
"gorm.io/gorm"
"time"
)
type Group struct {
gorm.Model
Code string `json:"code"` //群号
Name string `json:"name"` //群组名称
Avatar string `json:"avatar"` //群组头像
Desc string `json:"description"` //群组简介
OwnerId uint `json:"owner_id"` //群主ID
MaxNum int `json:"max_num"` //群组最大人数
Status Status `json:"status" ` //群组状态(1=正常,0=关闭)
MuteEnd *time.Time `json:"mute_end"` // 禁言截至时间
}
func (m *Group) TableName() string {
return "groups"
}
群成员 Struct
package model
import (
"gorm.io/gorm"
"time"
)
type GroupMember struct {
gorm.Model
GroupId uint `json:"group_id"` //群ID
MemberId uint `json:"member_id"` //成员ID
GNickName string `json:"g_nick_name"` //群昵称
Role Role `json:"role"` //成员角色(0=普通成员,1=群主,2=管理员)
MuteEnd *time.Time `json:"mute_end"` //禁言截至时间(null未禁言)
}
func (gm *GroupMember) TableName() string {
return "group_members"
}
func (gm *GroupMember) IsOwner() bool {
return gm.Role == 1
}
func (gm *GroupMember) IsAdmin() bool {
return gm.Role == 2
}
func (gm *GroupMember) IsMuted() bool {
return gm.MuteEnd != nil && gm.MuteEnd.After(time.Now())
}
群公告
package model
import "gorm.io/gorm"
// GroupAnnouncement 群组公告响应结构体
type GroupAnnouncement struct {
gorm.Model
GroupID uint `json:"group_id"` // 群组ID
Content string `json:"content"` // 公告内容
Publisher uint `json:"publisher"` // 发布者ID
}
API
func GroupApi(r *gin.Engine) {
groupApi := r.Group(configs.AppConfig.Api.Prefix+"/group", middleware.AuthMiddleware())
{
// 群聊相关
groupApi.POST("/create", controllers.GroupControllerInstance.Create)
groupApi.POST("/update", controllers.GroupControllerInstance.Update)
groupApi.GET("/join", controllers.GroupControllerInstance.Join)
groupApi.GET("/quit", controllers.GroupControllerInstance.Quit)
groupApi.POST("/search", controllers.GroupControllerInstance.Search)
groupApi.GET("/member", controllers.GroupControllerInstance.Member)
groupApi.POST("/mute", controllers.GroupControllerInstance.Mute)
// 群公告相关
groupApi.POST("/:group_id/announcement/create", controllers.GroupControllerInstance.CreateAnnouncement)
groupApi.POST("/:group_id/announcement/update", controllers.GroupControllerInstance.UpdateAnnouncement)
groupApi.GET("/:group_id/announcement/delete", controllers.GroupControllerInstance.DeleteAnnouncement)
groupApi.GET("/:group_id/announcement", controllers.GroupControllerInstance.GetAnnouncement)
groupApi.GET("/:group_id/announcement_list", controllers.GroupControllerInstance.GetAnnouncementList)
// 群聊权限相关
groupApi.POST("/:group_id/kick", controllers.GroupControllerInstance.KickMember)
groupApi.POST("/:group_id/set_admin", controllers.GroupControllerInstance.SetAdmin)
groupApi.POST("/:group_id/unset_admin", controllers.GroupControllerInstance.UnsetAdmin)
groupApi.POST("/:group_id/mute", controllers.GroupControllerInstance.MuteMember)
groupApi.POST("/:group_id/unmute", controllers.GroupControllerInstance.UnmuteMember)
groupApi.POST("/:group_id/dissolve", controllers.GroupControllerInstance.Dissolve)
groupApi.POST("/:group_id/transfer", controllers.GroupControllerInstance.Transfer)
}
}
| 接口名 | 请求方式 | 请求路径 | 请求参数说明 | 响应说明 |
|---|---|---|---|---|
| 创建群组 | POST | /group/create |
JSON GroupCreateRequest包含群名、简介、最大人数、成员ID列表等 |
成功无数据返回,失败返回错误信息 |
| 更新群组信息 | POST | /group/update |
JSON GroupUpdateRequestgroup_id必传,其余字段可选: name、 avatar、 desc、 max_num |
成功无数据返回,失败返回错误信息 |
| 加入群组 | GET | /group/join |
Query 参数:group_id |
成功无数据返回,失败返回错误信息 |
| 退出群组 | GET | /group/quit |
Query 参数:group_id |
成功无数据返回,失败返回错误信息 |
| 搜索群组 | POST | /group/search |
JSON GroupSearchRequest,支持名称/ID 搜索 |
返回匹配群组列表 |
| 获取群成员列表 | GET | /group/member |
Query 参数:group_id |
返回群成员数组 |
| 群主设置群成员禁言 | POST | /group/{group_id}/mute |
JSON GroupMemberMuteRequest含: member_id, duration(秒) |
成功无数据返回,失败返回错误信息 |
| 群主取消成员禁言 | POST | /group/{group_id}/unmute |
JSON UnmuteMemberRequest含: member_id |
成功无数据返回,失败返回错误信息 |
| 设置群管理员 | POST | /group/{group_id}/set_admin |
JSON SetAdminRequest含: member_id |
成功无数据返回,失败返回错误信息 |
| 取消群管理员 | POST | /group/{group_id}/unset_admin |
JSON UnsetAdminRequest含: member_id |
成功无数据返回,失败返回错误信息 |
| 踢出群成员 | POST | /group/{group_id}/kick |
JSON KickMemberRequest含: member_id |
成功无数据返回,失败返回错误信息 |
| 群主转让群 | POST | /group/{group_id}/transfer |
JSON GroupTransferRequest含: new_owner_id, group_id |
成功无数据返回,失败返回错误信息 |
| 解散群组 | POST | /group/{group_id}/dissolve |
Path 参数:group_id(使用登录用户身份验证) |
成功无数据返回,失败返回错误信息 |
| 设置整群禁言 | POST | /group/mute |
JSON GroupMuteRequest :group_idmute_end(时间戳) |
成功无数据返回,失败返回错误信息 |
| 创建公告 | POST | /group/{group_id}/announcement/create |
Path:group_id Body:GroupAnnouncementCreateRequest |
成功无数据返回,失败返回错误信息 |
| 更新公告 | POST | /group/{group_id}/announcement/update |
Path:group_id Body:GroupAnnouncementUpdateRequest |
成功无数据返回,失败返回错误信息 |
| 删除公告 | GET | /group/{group_id}/announcement/delete |
Path:group_id Query:announcement_id |
成功无数据返回,失败返回错误信息 |
| 查询单条公告 | GET | /group/{group_id}/announcement |
Path:group_id |
返回公告内容 |
| 查询公告列表 | GET | /group/{group_id}/announcement_list |
Path:group_id |
返回公告数组列表 |
浙公网安备 33010602011771号