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) 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 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) }