public ICommandResult Handle(UpdateCommerceCommand command)
        {
            // Fail Fast Validations
            command.Validate();
            if (command.Invalid)
            {
                AddNotifications(command);
                return(new BadRequestCommandResult("Não foi possível atualizar o comércio.", this));
            }

            if (_commerceRepository.NameExists(command.Name, command.Id))
            {
                AddNotification("Name", "Este nome já está em uso.");
            }

            if (_commerceRepository.DomainExists(command.SiteDomain, command.Id))
            {
                AddNotification("Domain", "Este domínio já está em uso.");
            }

            var address = new Address(command.Country, command.State, command.City, command.ZipCode, command.Street);

            AddNotifications(address, this);

            if (Invalid)
            {
                return(new BadRequestCommandResult("Não foi possível atualizar o comércio.", this));
            }

            var commerce = _commerceRepository.GetById(command.Id);

            if (commerce is null)
            {
                AddNotification("Commerce", "Não foi possível encontrar o comércio.");
                return(new NotFoundCommandResult("Não foi possível atualizar o comércio.", this));
            }

            var site = commerce.Site;

            site.Update(command.SiteDomain);

            commerce.Update(command.Name, site, address);

            // Agrupar as validações
            AddNotifications(address, site, commerce);

            if (Invalid)
            {
                return(new BadRequestCommandResult("Não foi possível atualizar o comércio.", this));
            }

            _commerceRepository.Update(commerce);
            _commerceRepository.SaveChanges();

            return(new SuccessCommandResult("Comércio atualizado com sucesso."));
        }
Esempio n. 2
0
        public ICommandResult Handle(CreateCommerceCommand command)
        {
            // Fail Fast Validations
            command.Validate();
            if (command.Invalid)
            {
                AddNotifications(command);
                return(new BadRequestCommandResult("Não foi possível cadastrar o comércio.", command));
            }

            if (_commerceRepository.NameExists(command.Name))
            {
                AddNotification("Name", "Este nome já está em uso.");
            }

            if (_commerceRepository.DomainExists(command.SiteDomain))
            {
                AddNotification("Domain", "Este domínio já está em uso.");
            }

            var address = new Address(command.Country, command.State, command.City, command.ZipCode, command.Street);
            var site    = new Site(command.SiteDomain);

            var commerce = new Commerce(command.Name, site, address);

            // Agrupar as validações
            AddNotifications(address, site, commerce);

            if (Invalid)
            {
                return(new BadRequestCommandResult("Não foi possível cadastrar o comércio.", this));
            }

            _commerceRepository.Save(commerce);
            _commerceRepository.SaveChanges();

            return(new SuccessCommandResult("Comércio cadastrado com sucesso.",
                                            new CreateCommerceResult(commerce.Id)));
        }