Add HTTP /v1 MVC, TCP send path, groups with server-side member-avatar collage, object-storage upload, and friends/favorites around the architecture-v3 layout. Co-authored-by: Cursor <cursoragent@cursor.com>
76 lines
1.8 KiB
Go
76 lines
1.8 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"`
|
|
OwnerID int64 `json:"owner_id"`
|
|
MutedAll bool `json:"muted_all"`
|
|
MemberCount int `json:"member_count"`
|
|
Role int `json:"role"`
|
|
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 int `json:"gender"`
|
|
Role int `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, role int) *View {
|
|
if g == nil {
|
|
return nil
|
|
}
|
|
return &View{
|
|
ID: g.ID, ConversationID: g.ConversationID, Name: g.Name, Avatar: g.Avatar,
|
|
OwnerID: g.OwnerID, MutedAll: g.MutedAll, MemberCount: g.MemberCount,
|
|
Role: role, CreatedAt: g.CreatedAtMS,
|
|
}
|
|
}
|
|
|
|
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() }
|