108 lines
2.2 KiB
Go
108 lines
2.2 KiB
Go
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)
|
|
}
|