Files
lassistanoque/backend/internal/service/user/service.go
T
2026-08-18 23:57:08 +02:00

83 lines
1.7 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) 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)
}