spark-server/internal/module/admin/logic/groups.go

78 lines
1.8 KiB
Go

package logic
import (
"context"
"strconv"
"strings"
"spark-server/internal/pkg/errs"
)
func (s *Service) ListGroups(ctx context.Context, q string) ([]GroupView, error) {
if !s.ready() {
return nil, ErrNotReady
}
rows, err := s.repo.ListGroups(ctx, q)
if err != nil {
return nil, err
}
out := make([]GroupView, 0, len(rows))
for _, r := range rows {
out = append(out, groupSummary(r))
}
return out, nil
}
func (s *Service) GroupDetail(ctx context.Context, groupIDStr string) (*GroupView, error) {
if !s.ready() {
return nil, ErrNotReady
}
gid, err := strconv.ParseInt(strings.TrimSpace(groupIDStr), 10, 64)
if err != nil || gid <= 0 {
return nil, errs.ErrNotFound
}
g, err := s.repo.GroupByID(ctx, gid)
if err != nil {
return nil, err
}
view := groupSummary(*g)
members, err := s.repo.ListGroupMembers(ctx, gid)
if err != nil {
return nil, err
}
view.Members = make([]GroupMemberOut, 0, len(members))
for _, m := range members {
nick := m.Nickname
if nick == "" {
nick = m.UNick
}
view.Members = append(view.Members, GroupMemberOut{
UserID: m.UserID, Email: m.Email, Nickname: nick, Role: roleName(m.Role),
})
}
msgs, err := s.repo.ListGroupMessages(ctx, gid, 100)
if err != nil {
return nil, err
}
view.Messages = make([]ImMessageView, 0, len(msgs))
for _, m := range msgs {
view.Messages = append(view.Messages, messageView(m))
}
return &view, nil
}
func (s *Service) DissolveGroup(ctx context.Context, groupIDStr string) error {
if s.groups == nil || !s.ready() {
return ErrNotReady
}
gid, err := strconv.ParseInt(strings.TrimSpace(groupIDStr), 10, 64)
if err != nil || gid <= 0 {
return errs.ErrNotFound
}
ownerID, err := s.repo.ActiveGroupOwner(ctx, gid)
if err != nil {
return err
}
return s.groups.Dissolve(ctx, ownerID, gid)
}