67 lines
1.6 KiB
Go
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)
|
|
}
|