first commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"secunda-test/internal/domain"
|
||||
)
|
||||
|
||||
type TeamService struct {
|
||||
teams TeamRepository
|
||||
users UserRepository
|
||||
email EmailSender
|
||||
}
|
||||
|
||||
func NewTeamService(teams TeamRepository, users UserRepository, email EmailSender) *TeamService {
|
||||
return &TeamService{teams: teams, users: users, email: email}
|
||||
}
|
||||
|
||||
func (s *TeamService) Create(ctx context.Context, userID int64, name string) (domain.Team, error) {
|
||||
if name == "" {
|
||||
return domain.Team{}, ErrBadRequest
|
||||
}
|
||||
t, err := s.teams.Create(ctx, name, userID)
|
||||
if err != nil {
|
||||
return domain.Team{}, err
|
||||
}
|
||||
if err := s.teams.AddMember(ctx, t.ID, userID, domain.RoleOwner); err != nil {
|
||||
return domain.Team{}, err
|
||||
}
|
||||
t.Role = domain.RoleOwner
|
||||
return t, nil
|
||||
}
|
||||
|
||||
func (s *TeamService) List(ctx context.Context, userID int64) ([]domain.Team, error) {
|
||||
return s.teams.ListByUser(ctx, userID)
|
||||
}
|
||||
|
||||
func (s *TeamService) Invite(ctx context.Context, actorID, teamID int64, email string) error {
|
||||
role, ok, err := s.teams.MemberRole(ctx, teamID, actorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !ok || (role != domain.RoleOwner && role != domain.RoleAdmin) {
|
||||
return ErrForbidden
|
||||
}
|
||||
u, err := s.users.FindByEmail(ctx, email)
|
||||
if err != nil {
|
||||
return ErrNotFound
|
||||
}
|
||||
if err := s.teams.AddMember(ctx, teamID, u.ID, domain.RoleMember); err != nil {
|
||||
return err
|
||||
}
|
||||
return s.email.SendInvite(ctx, email, "")
|
||||
}
|
||||
Reference in New Issue
Block a user