Files
EchoChat/backend/go-service/app/im/model/conversation_member.go
bujinyuan 19979da59e feat(phase2c): 群聊与已读回执功能完整实现
Phase 2c 全部 14 个 Task 完成,包含:

后端(Go):
- MinIO 文件存储服务集成(Docker + Go SDK + 通用上传 API)
- Group 模块完整实现(DAO + Service + Controller + Router + Wire)
  - 18 个群管理 REST API + 11 个 WS 群事件推送
  - 群创建/解散/邀请/踢人/退出/转让群主/设管理员/禁言/全体禁言/群公告/群昵称/免打扰/搜索
- IM Service 扩展(群消息发送/撤回 + @提醒 + 管理员无时限撤回)
- 已读回执后端(单聊会话级 last_read_msg_id + 群聊消息级 im_message_reads)
- 管理端群组管理(列表/详情/解散)
- 数据库迁移(3 张新表 + 2 张表字段扩展)

前端(uni-app):
- 群聊 Store + API 封装 + 11 个 WS 事件监听
- 已读回执 UI(单聊已读/未读标记 + 群聊 X人已读 + 已读详情页)
- 7 个群聊页面(对话/创建/设置/成员/邀请/审批/搜索)
- 会话列表改造(全部/单聊/群聊 Tab + @标记 + 免打扰标识)

管理端(Vue 3 + Element Plus):
- 群组列表页(搜索/分页/详情弹窗/解散群聊)
- 侧边栏群组管理入口

文档同步:进度/架构/设计/API/规范文档全部更新

Made-with: Cursor
2026-03-04 14:58:23 +08:00

31 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import "time"
// ConversationMember 会话成员模型,对应 im_conversation_members 表
// 每个会话的每个成员一条记录,存储置顶/未读/软删除等个人视图
// 群聊场景下额外使用 Role/Nickname/IsMuted/IsDoNotDisturb/JoinedAt/AtMeCount 字段
type ConversationMember struct {
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"` // 记录唯一标识
ConversationID int64 `json:"conversation_id" gorm:"not null;uniqueIndex:idx_conv_user"` // 所属会话 ID
UserID int64 `json:"user_id" gorm:"not null;uniqueIndex:idx_conv_user"` // 成员用户 ID
IsPinned bool `json:"is_pinned" gorm:"default:false"` // 是否置顶该会话
IsDeleted bool `json:"is_deleted" gorm:"default:false"` // 是否删除该会话(软删除,不影响对方)
UnreadCount int `json:"unread_count" gorm:"default:0"` // 该成员在此会话中的未读消息数
LastReadMsgID int64 `json:"last_read_msg_id" gorm:"default:0"` // 该成员最后已读消息 ID
ClearBeforeMsgID int64 `json:"clear_before_msg_id" gorm:"default:0"` // 清空记录时的消息截止 ID个人视图不影响对方
Role int `json:"role" gorm:"not null;default:0"` // 成员角色0=普通成员1=管理员2=群主
Nickname string `json:"nickname" gorm:"size:50;default:''"` // 群内昵称(仅群聊有效)
IsMuted bool `json:"is_muted" gorm:"not null;default:false"` // 是否被禁言
IsDoNotDisturb bool `json:"is_do_not_disturb" gorm:"not null;default:false"` // 是否消息免打扰
JoinedAt *time.Time `json:"joined_at" gorm:"type:timestamp(0)"` // 加入群聊时间
AtMeCount int `json:"at_me_count" gorm:"default:0"` // 被@提醒未读计数
CreatedAt time.Time `json:"created_at" gorm:"not null;autoCreateTime;type:timestamp(0)"` // 加入会话时间
UpdatedAt time.Time `json:"updated_at" gorm:"not null;autoUpdateTime;type:timestamp(0)"` // 最后更新时间
}
// TableName 指定数据库表名
func (ConversationMember) TableName() string {
return "im_conversation_members"
}