public GenericResult Exec(InfracaoDeleteCommand command)
        {
            InfracaoModel model = _repository.GetById(command.Id);

            if (model == null)
            {
                command.AddNotification("Id", "Recurso Inexistente");
            }


            command.Validate();
            if (command.Invalid)
            {
                return(new GenericResult(400, "Recurso Inválido", command.Notifications));
            }


            try
            {
                _repository.Delete(model);

                return(new GenericResult(200, "Recurso Removido", null));
            }
            catch (System.Exception ex)
            {
                return(new GenericResult(503, ex.GetBaseException().Message, null));
            }
        }
        public GenericResult Exec(InfracaoInsertCommand command)
        {
            GrupoModel grupoModel = _repositoryGrupo.GetById(command.GrupoId);

            if (grupoModel == null)
            {
                command.AddNotification("GrupoId", "Grupo Inexistente");
            }

            NaturezaModel naturezaModel = _repositoryNatureza.GetById(command.NaturezaId);

            if (naturezaModel == null)
            {
                command.AddNotification("Natureza", "Natureza Inexistente");
            }

            InfracaoModel model = _repository.GetByCodigoEValidadeInicio(command.Codigo, command.ValidadeInicio);

            if (model != null)
            {
                command.AddNotification("Codigo e ValidadeInicio", "Par (Código e Validade) já existente para o id:" + model.Id.ToString());
            }



            command.Validate();
            if (command.Invalid)
            {
                return(new GenericResult(400, "Recurso Inválido", command.Notifications));
            }


            model = new InfracaoModel(
                command.Codigo, command.Descricao, command.AmparoLegal, command.MedidaAdm, command.Crime, command.ObsObrigatoria, command.GrupoId, command.NaturezaId,
                command.CompetenciaMunicipal, command.CompetenciaEstadual,
                command.CompetenciaRodoviaria, command.InfratorCondutor, command.InfratorProprietario,
                command.ValidadeInicio
                );



            // inicio Enquadrando
            InfracaoModel infracaoMenor = _repository.GetByCodigoValidadeInicioMenor(0, command.Codigo, command.ValidadeInicio);
            InfracaoModel infracaoMaior = _repository.GetByCodigoValidadeInicioMaior(0, command.Codigo, command.ValidadeInicio);


            if (infracaoMenor != null)
            {
                infracaoMenor.SetDataFim(command.ValidadeInicio.AddDays(-1));
            }

            if (infracaoMaior != null)
            {
                model.SetDataFim(infracaoMaior.ValidadeInicio.AddDays(-1));
            }
            // fim Enquadrando


            try
            {
                if (infracaoMenor != null)
                {
                    _repository.Update(infracaoMenor);
                }

                _repository.Insert(model);

                model = _repository.GetById(model.Id);

                return(new GenericResult(201, "Recurso Inserido", model));
            }
            catch (System.Exception ex)
            {
                return(new GenericResult(503, ex.GetBaseException().Message, null));
            }
        }