package user import ( "fmt" "trankilou.fr/lassistanoque/backend/internal/domain" ) type Service struct { repo domain.UserRepository } func NewService(repo domain.UserRepository) *Service { return &Service{ repo, } } func (s *Service) GetUser(id string) (*domain.User, error) { user, err := s.repo.FindUser(id) if err != nil { return nil, err } if !user.Enabled { return nil, fmt.Errorf("unauthorized") } return user, nil } func (s *Service) GetUserWithTeams(id string) (*domain.UserWithTeams, error) { u, err := s.GetUser(id) if err != nil { return nil, err } teams, err := s.repo.ListTeams(u.ID) if err != nil { return nil, err } userTeams, err := s.repo.ListUserTeams(u.ID) if err != nil { return nil, err } ut := &domain.UserWithTeams{ User: u, UserTeams: userTeams, Teams: teams, } return ut, nil } func (s *Service) UpdateUser(updUser *domain.User, fromAdmin bool) (*domain.User, error) { user, err := s.repo.FindUser(updUser.ID) if err != nil { return nil, err } if fromAdmin { user.Enabled = updUser.Enabled } user.Email = updUser.Email user.Firstname = updUser.Firstname user.Lastname = updUser.Lastname user.Theme = updUser.Theme user.Lang = updUser.Lang user.Timezone = updUser.Timezone return s.repo.UpdateUser(user) } func (s *Service) ListAdresses(userId string) ([]*domain.UserAddress, error) { return s.repo.ListUserAddresses(userId) } func (s *Service) AddAddress(userId string, typ string, address string) (*domain.UserAddress, error) { addr := &domain.UserAddress{ UserID: userId, Type: typ, Address: address, } return s.repo.CreateUserAddress(addr) } func (s *Service) UpdateAddress(userId string, address *domain.UserAddress) (*domain.UserAddress, error) { old, err := s.repo.GetUserAddress(address.ID) if err != nil { return nil, err } if old.UserID != userId { return nil, fmt.Errorf("unauthorized") } return s.repo.UpdateUserAddress(address) } func (s *Service) DeleteAddress(userId string, addressId string) error { old, err := s.repo.GetUserAddress(addressId) if err != nil { return err } if old.UserID != userId { return fmt.Errorf("unauthorized") } return s.repo.DeleteUserAddress(addressId) } func (s *Service) GetTeam(userid, id string) (*domain.Team, error) { team, err := s.repo.FindTeam(userid, id) if err != nil { return nil, err } return team, nil } func (s *Service) UpdateTeam(userid string, team *domain.Team) (*domain.Team, error) { updTeam, err := s.repo.FindTeam(userid, team.ID) if err != nil { return nil, err } updTeam.Label = team.Label updTeam.DefaultAgentID = team.DefaultAgentID return s.repo.UpdateTeam(userid, updTeam) }