2026-07-02 10:53:44 +08:00

67 lines
1.6 KiB
Go

package team
import (
"strings"
"hyapp-admin-server/internal/model"
"hyapp-admin-server/internal/modules/shared"
"hyapp-admin-server/internal/repository"
)
type Service struct {
store *repository.Store
}
type Input struct {
Name string
ParentID *uint
Description string
Sort int
}
func NewService(store *repository.Store) *Service {
return &Service{store: store}
}
func (s *Service) ListTeams(keyword string) ([]model.Team, error) {
return s.store.ListTeams(keyword)
}
func (s *Service) CreateTeam(input Input) (*model.Team, error) {
team := model.Team{
ParentID: input.ParentID,
Name: strings.TrimSpace(input.Name),
Description: strings.TrimSpace(input.Description),
Sort: input.Sort,
}
if err := s.store.CreateTeam(&team); err != nil {
return nil, err
}
return s.store.GetTeam(team.ID)
}
func (s *Service) UpdateTeam(id uint, input Input) (*model.Team, error) {
return s.store.UpdateTeam(id, model.Team{
ParentID: input.ParentID,
Name: strings.TrimSpace(input.Name),
Description: strings.TrimSpace(input.Description),
Sort: input.Sort,
})
}
func (s *Service) ListTeamUsers(actor shared.Actor, teamID uint, options repository.ListOptions) ([]model.User, int64, error) {
if _, err := s.store.GetTeam(teamID); err != nil {
return nil, 0, err
}
access, err := s.store.DataAccessForUser(actor.UserID)
if err != nil {
return nil, 0, err
}
teamIDs, err := s.store.TeamAndChildIDs(teamID)
if err != nil {
return nil, 0, err
}
options.TeamIDs = teamIDs
return s.store.ListUsersWithAccess(options, access)
}