152 lines
4.4 KiB
Go
152 lines
4.4 KiB
Go
package applicationservice
|
|
|
|
import (
|
|
"bitbucket.org/nemt/nemt-portal-api/application/entitymapping"
|
|
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
|
|
"bitbucket.org/nemt/nemt-portal-api/domain/entity"
|
|
"bitbucket.org/nemt/nemt-portal-api/domain/service"
|
|
"bitbucket.org/nemt/nemt-portal-api/infra/errors"
|
|
)
|
|
|
|
// userService holds methods to user application service
|
|
type userService struct {
|
|
svc *service.Service
|
|
mapEntity *entitymapping.Mapper
|
|
}
|
|
|
|
// newUserService returns a userService instance
|
|
func newUserService(svc *service.Service, mapper *entitymapping.Mapper) *userService {
|
|
return &userService{
|
|
svc: svc,
|
|
mapEntity: mapper,
|
|
}
|
|
}
|
|
|
|
// GetAll returns a list of users
|
|
func (s *userService) GetAll(quantity int64, page int64) (retVal []viewmodel.User, err error) {
|
|
users, err := s.svc.Users.GetAll()
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
return s.mapEntity.User.ToUserModelSlice(users), nil
|
|
}
|
|
|
|
// GetByID returns a specific user by its ID
|
|
func (s *userService) GetByID(id int64) (retVal viewmodel.User, err error) {
|
|
user, err := s.svc.Users.GetByID(id)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModel(user), nil
|
|
}
|
|
|
|
// GetByID returns a specific user by its ID
|
|
func (s *userService) GetByUUID(uuid string, profile string) (retVal viewmodel.User, err error) {
|
|
user, err := s.svc.Users.GetByUUID(uuid, profile)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModel(user), nil
|
|
}
|
|
|
|
// Login returns a specific user by email and pass
|
|
func (s *userService) FullLogin(loginType string, key string, pass string, profile string) (retVal viewmodel.User, err error) {
|
|
user, err := s.svc.Users.FullLogin(loginType, key, pass, profile)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModel(user), nil
|
|
}
|
|
|
|
// Login returns a specific user by email and pass
|
|
func (s *userService) Login(email string, pass string) (retVal viewmodel.User, err error) {
|
|
user, err := s.svc.Users.Login(email, pass)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModel(user), nil
|
|
}
|
|
|
|
func (s *userService) Create(user viewmodel.User, author viewmodel.User) (retVal viewmodel.User, err error) {
|
|
entity := s.mapEntity.User.ToUserEntity(user)
|
|
enAuthor := s.mapEntity.User.ToUserEntity(author)
|
|
|
|
for i, _ := range entity.Organizations {
|
|
entity.Organizations[i], err = s.svc.Organization.GetByUUID(entity.Organizations[i].UUID, enAuthor)
|
|
if err != nil {
|
|
return retVal, err
|
|
}
|
|
}
|
|
|
|
entity, err = s.svc.Users.Create(entity)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModel(entity), nil
|
|
}
|
|
|
|
func (s *userService) CreateBulk(users []viewmodel.User, author viewmodel.User) (retVal []viewmodel.User, err error) {
|
|
entities := s.mapEntity.User.ToUserEntitySlice(users)
|
|
enAuthor := s.mapEntity.User.ToUserEntity(author)
|
|
organizations := make([]entity.Organization, 0)
|
|
for i, _ := range entities {
|
|
if i == 0 {
|
|
for o, _ := range entities[i].Organizations {
|
|
org, err := s.svc.Organization.GetByUUID(entities[i].Organizations[o].UUID, enAuthor)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
organizations = append(organizations, org)
|
|
}
|
|
}
|
|
entities[i].Organizations = organizations
|
|
}
|
|
|
|
entities, err = s.svc.Users.CreateBulk(entities)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToUserModelSlice(entities), nil
|
|
}
|
|
|
|
// GetUsersByProfile returns a list of users by profile
|
|
func (s *userService) GetUsersByProfile(profile string) (retVal []viewmodel.User, err error) {
|
|
users, err := s.svc.Users.GetUsersByProfile(profile)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
list := s.mapEntity.User.ToUserModelSlice(users)
|
|
|
|
return list, nil
|
|
}
|
|
|
|
func (s *userService) RemoveAddress(addressUUID string) error {
|
|
return s.svc.Users.RemoveAddress(addressUUID)
|
|
}
|
|
|
|
func (s *userService) SaveAddress(address viewmodel.Address) (retVal viewmodel.Address, err error) {
|
|
entity := s.mapEntity.Address.ToAddressEntity(address)
|
|
entity, err = s.svc.Users.SaveAddress(entity)
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.Address.ToAddressModel(entity), err
|
|
}
|
|
|
|
func (s *userService) GetContactType() (retVal []viewmodel.ContactType, err error) {
|
|
entity, err := s.svc.Users.GetContactType()
|
|
if err != nil {
|
|
return retVal, errors.Wrap(err)
|
|
}
|
|
|
|
return s.mapEntity.User.ToContactTypeModelSlice(entity), nil
|
|
}
|