Exemple #1
0
        public async Task <UserResponse> UpdateUserAsync(UserRequest request)
        {
            var user = await _userBus.GetByIdAsync(request.Id ?? 0).ConfigureAwait(false);

            if (user == null)
            {
                var spec = new CreateUserSpec();
                spec.AddMessage(BusinessSpecStatus.ResourceNotFound, UserServiceMessages.UsuarioNaoEncontrado);

                AddSpec(spec);
                return(null);
            }

            var token = await _userBus.GetTokenAsync().ConfigureAwait(false);

            if (token?.IdUser != user.Id)
            {
                var spec = new CreateUserSpec();
                spec.AddMessage(BusinessSpecStatus.Forbidden, UserServiceMessages.EditarProprioUsuario);

                AddSpec(spec);
                return(null);
            }

            if (await _userBus.ExistsEmailAsync(request.Email, request.Id).ConfigureAwait(false))
            {
                var spec = new CreateUserSpec();
                spec.AddMessage(BusinessSpecStatus.Conflict, UserServiceMessages.EmailJaCadastrado);

                AddSpec(spec);
                return(null);
            }

            Address address = null;

            if (request.Address != null)
            {
                address = await _addressBus
                          .GetByInfoAsync(request.Address.Street, request.Address.Number, request.Address.Complement, request.Address.District, request.Address.City, request.Address.State, request.Address.PostalCode)
                          .ConfigureAwait(false);

                if (address == null)
                {
                    address = new Address(request.Address.Street, request.Address.Number, request.Address.Complement, request.Address.District, request.Address.City, request.Address.State, request.Address.PostalCode);
                    AddSpec(new AddressSpec(address));

                    user.ChangeAddress(address);
                }
            }
            else
            {
                user.RemoveAddress();
            }

            IList <Phone> phones = new List <Phone>();

            if (request.Phones.Any())
            {
                phones = await _phoneBus
                         .GetByNumbersAsync
                         (
                    request.Phones
                    .Select(phone => new Tuple <string, string>(phone.LocalCode, phone.Number))
                    .ToList()
                         )
                         .ConfigureAwait(false);

                request.Phones
                .Where(phone => !phones.Any(p => p.LocalCode == phone.LocalCode && p.Number == p.Number))
                .ToList()
                .ForEach(p =>
                {
                    var newPhone = new Phone(p.LocalCode, p.Number);
                    AddSpec(new PhoneSpecs(newPhone));

                    phones.Add(newPhone);
                });

                user.ChangePhones(phones);
            }
            else
            {
                user.RemovePhones();
            }

            user.Update(request.FirstName, request.MiddleName, request.LastName, request.Email, request.Cpf);
            AddSpec(new UserSpec(user));

            if (!IsSatisfied())
            {
                return(null);
            }

            await _userBus.UpdateUserAsync(user).ConfigureAwait(false);

            return(new UserResponse {
                Id = user.Id
            });
        }
Exemple #2
0
        public async Task <UserResponse> CreateUserAsync(UserRequest request)
        {
            if (await _userBus.ExistsEmailAsync(request.Email).ConfigureAwait(false))
            {
                var spec = new CreateUserSpec();
                spec.AddMessage(BusinessSpecStatus.Conflict, UserServiceMessages.EmailJaCadastrado);

                AddSpec(spec);
                return(null);
            }

            Address address = null;

            if (request.Address != null)
            {
                address = await _addressBus
                          .GetByInfoAsync(request.Address.Street, request.Address.Number, request.Address.Complement, request.Address.District, request.Address.City, request.Address.State, request.Address.PostalCode)
                          .ConfigureAwait(false);

                if (address == null)
                {
                    address = new Address(request.Address.Street, request.Address.Number, request.Address.Complement, request.Address.District, request.Address.City, request.Address.State, request.Address.PostalCode);
                    AddSpec(new AddressSpec(address));
                }
            }

            IList <Phone> phones = new List <Phone>();

            if (request.Phones.Any())
            {
                phones = await _phoneBus
                         .GetByNumbersAsync
                         (
                    request.Phones
                    .Select(phone => new Tuple <string, string>(phone.LocalCode, phone.Number))
                    .ToList()
                         )
                         .ConfigureAwait(false);

                request.Phones
                .Where(phone => !phones.Any(p => p.LocalCode == phone.LocalCode && p.Number == p.Number))
                .ToList()
                .ForEach(p =>
                {
                    var newPhone = new Phone(p.LocalCode, p.Number);
                    AddSpec(new PhoneSpecs(newPhone));

                    phones.Add(newPhone);
                });
            }

            var user = new User(new Name(request.FirstName, request.MiddleName, request.LastName), request.Email, request.Cpf, address, phones);

            AddSpec(new UserSpec(user));

            if (!IsSatisfied())
            {
                return(null);
            }

            user = await _userBus.CreateUserAsync(user).ConfigureAwait(false);

            return(user.ToResponse());
        }