spark-server/internal/module/group/logic/view.go
2026-09-18 14:50:41 +08:00

85 lines
2.2 KiB
Go

package logic
import (
"time"
"spark-server/internal/module/group/entity"
userentity "spark-server/internal/module/user/entity"
)
// View is the HTTP/TCP group card. ID is the AUTO_INCREMENT 群号.
type View struct {
ID int64 `json:"id"`
ConversationID int64 `json:"conversation_id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Announcement string `json:"announcement"`
OwnerID int64 `json:"owner_id"`
MutedAll bool `json:"muted_all"`
MemberCount int `json:"member_count"`
Role entity.Role `json:"role"`
Remark string `json:"remark"`
GroupNickname string `json:"group_nickname"`
CreatedAt int64 `json:"created_at"`
}
type MemberView struct {
UID int64 `json:"uid"`
SparkID string `json:"spark_id"`
Nickname string `json:"nickname"`
Avatar string `json:"avatar"`
Gender userentity.Gender `json:"gender"`
Role entity.Role `json:"role"`
GroupNickname string `json:"group_nickname"`
SpeakMuted bool `json:"speak_muted"`
JoinedAt int64 `json:"joined_at"`
}
type List struct {
Items []*View `json:"items"`
}
type MemberList struct {
Items []*MemberView `json:"items"`
}
func viewOf(g *entity.Group, mem *entity.Member) *View {
if g == nil {
return nil
}
v := &View{
ID: g.ID, ConversationID: g.ConversationID, Name: g.Name, Avatar: g.Avatar,
Announcement: g.Announcement, OwnerID: g.OwnerID, MutedAll: g.MutedAll,
MemberCount: g.MemberCount, CreatedAt: g.CreatedAtMS,
}
if mem != nil {
v.Role = mem.Role
v.Remark = mem.Remark
v.GroupNickname = mem.Nickname
}
return v
}
func memberViewOf(mem *entity.Member, u *userentity.User) *MemberView {
v := &MemberView{}
if mem != nil {
v.UID = mem.UserID
v.Role = mem.Role
v.GroupNickname = mem.Nickname
v.SpeakMuted = mem.SpeakMuted
v.JoinedAt = mem.JoinedAtMS
}
if u != nil {
v.SparkID = u.SparkID
v.Nickname = u.Nickname
v.Avatar = u.Avatar
v.Gender = u.Gender
if v.UID == 0 {
v.UID = u.ID
}
}
return v
}
func nowMS() int64 { return time.Now().UnixMilli() }