public async Task <Response> Handle(CadastrarMesaRequest request, CancellationToken cancellationToken)
        {
            //Validar se o requeste veio preenchido
            if (request == null)
            {
                AddNotification("Resquest", "Preencha as informações da mesa");
                return(new Response(this));
            }


            var proprietario = _repositoryProprietario.ObterPorId(request.FkProprietario.Value);
            var empresa      = _repositoryEmpresa.ObterPorId(Guid.Parse(proprietario.EmpresaUltimoAcesso));

            var contains = empresa.Mesas.Where(x => x.Numero == request.Numero);

            if (contains == null)
            {
                AddNotification("Mesa", "A mesa já foi cadastrada");
                return(new Response(this));
            }

            Entities.Mesa mesa = new Entities.Mesa(request.Numero, empresa);

            if (IsInvalid())
            {
                return(new Response(this));
            }
            AddNotifications(mesa);
            mesa = _repositoryMesa.Adicionar(mesa);

            empresa.AdicionarMesa(mesa);
            _repositoryEmpresa.Editar(empresa);

            try
            {
                _unitOfWork.SaveChanges();
            }
            catch (Exception ex)
            {
                this.AddNotification("Adicionar Empresa", "Erro ao persistir dados: " + ex.Message);
            }
            if (IsInvalid())
            {
                return(new Response(this));
            }

            var result   = new { Id = mesa.Id, Nome = mesa.Numero, Empresa = mesa.Empresa.Fantasia };
            var response = new Response(this, result);

            return(await Task.FromResult(response));
        }
        public async Task <Response> Handle(CadastrarEmpresaRequest request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                AddNotification("Resquest", "Preencha as informações da Empresa");
                return(new Response(this));
            }

            if (_repositoryEmpresa.Existe(x => x.Cnpj == request.Cnpj))
            {
                AddNotification("Resquest", "Empresa já está cadastrada");
                return(new Response(this));
            }

            var proprietario = _repositoryProprietario.ObterPorId(request.FkProprietario.Value);

            if (proprietario == null)
            {
                AddNotification("Resquest", "O proprietário não é válido");
                return(new Response(this));
            }

            Entities.Empresa empresa = new Entities.Empresa(request.RazaoSocial, request.Fantasia, request.Cnpj, request.Email, request.Telefone, request.Categoria, request.Endereco, proprietario);
            if (IsInvalid())
            {
                return(new Response(this));
            }
            AddNotifications(empresa);

            empresa = _repositoryEmpresa.Adicionar(empresa);

            proprietario.AdicionarEmpresa(empresa);
            proprietario.EmpresaUltimoAcesso = empresa.Id.ToString();
            _repositoryProprietario.Editar(proprietario);
            try
            {
                _unitOfWork.SaveChanges();
            }
            catch (Exception ex)
            {
                this.AddNotification("Adicionar Empresa", "Erro ao persistir dados: " + ex.Message);
            }

            var result   = new { RazaoSocial = empresa.RazaoSocial, Fantasia = empresa.Fantasia, Cnpj = empresa.Cnpj, Telefone = empresa.Telefone, Proprietario = empresa.Proprietario.Nome };
            var response = new Response(this, result);

            return(await Task.FromResult(response));
        }