Files
lassistanoque/backend/internal/service/user/service.go
T
2026-08-31 21:23:35 +02:00

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