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>
42 lines
924 B
Go
42 lines
924 B
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
|
|
"spark-server/internal/pkg/errs"
|
|
)
|
|
|
|
func (s *Service) Get(ctx context.Context, userID, groupID int64) (*View, error) {
|
|
if !s.ready() || userID <= 0 {
|
|
return nil, errs.ErrUnauthorized
|
|
}
|
|
g, err := s.loadActive(ctx, groupID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mem, err := s.requireMember(ctx, groupID, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return viewOf(g, mem.Role), nil
|
|
}
|
|
|
|
func (s *Service) List(ctx context.Context, userID int64, limit int) (*List, error) {
|
|
if !s.ready() || userID <= 0 {
|
|
return nil, errs.ErrUnauthorized
|
|
}
|
|
groups, err := s.repo.ListByUser(ctx, userID, limit)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
items := make([]*View, 0, len(groups))
|
|
for _, g := range groups {
|
|
role := 0
|
|
if mem, err := s.repo.GetMember(ctx, g.ID, userID); err == nil {
|
|
role = mem.Role
|
|
}
|
|
items = append(items, viewOf(g, role))
|
|
}
|
|
return &List{Items: items}, nil
|
|
}
|