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 GroupUpdateRequest
group_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 GroupMuteRequestgroup_id
mute_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 返回公告数组列表

posted on 2025-07-28 20:53  依只  阅读(7)  评论(0)    收藏  举报

导航