Exclusao de Itens do Romaneio - Hard Delete
Resumo
Ao excluir um item (Documento Fiscal) da tabela de um Romaneio, o sistema realiza uma exclusao fisica (hard delete) do registro na tabela RomaneioDocumentoFiscal. Nao existe soft delete com flag de status para esta operacao.
Contexto
- URL:
/expedicao/atualizar-romaneio/{id} - Entidade:
RomaneioDocumentoFiscal - Tabela:
RomaneioDocumentoFiscal
Fluxo de Exclusao
1. Frontend (View)
Quando o usuario clica no botao "Excluir" em um item da tabela, o campo IsDeleted do ViewModel e marcado como true:
2. Controller
Antes de processar a atualizacao, o controller chama o metodo ExcluirDocumentosDeletados():
// RomaneioController.cs:118
[HttpPost("atualizar-romaneio/{id:int}")]
public async Task<IActionResult> Edit(int id, RomaneioViewModel viewModel)
{
if (ModelState.IsValid)
{
viewModel.ExcluirDocumentosDeletados(); // Remove itens marcados
var romaneio = _mapper.Map<Romaneio>(viewModel);
await _romaneioService.Update(romaneio);
// ...
}
}
3. ViewModel
O metodo remove da lista os itens marcados como deletados ou sem DocumentoFiscalId:
// RomaneioViewModel.cs:62-63
public void ExcluirDocumentosDeletados() =>
RomaneioDocumentosFiscais.RemoveAll(x => x.DocumentoFiscalId.HasValue is false || x.IsDeleted);
4. Repository
O repositorio compara os itens enviados com os existentes no banco e remove fisicamente os que nao estao mais na lista:
// RomaneioRepository.cs:14-27
public async Task AtualizarRomaneio(Romaneio romaneio)
{
var romaneioDocumentosFiscaisDb = await NelmetaisDbContext.RomaneioDocumentoFiscal
.Where(x => x.RomaneioId == romaneio.Id)
.ToListAsync();
foreach (var romaneioDocumentoFiscalDb in romaneioDocumentosFiscaisDb)
{
// Se o item do banco NAO existe na lista enviada, REMOVE fisicamente
if (romaneio.RomaneioDocumentosFiscais.Any(x => x.Id == romaneioDocumentoFiscalDb.Id) is false)
NelmetaisDbContext.RomaneioDocumentoFiscal.Remove(romaneioDocumentoFiscalDb);
}
await base.Update(romaneio);
}
Diagrama do Fluxo
Usuario clica "Excluir"
|
v
ViewModel.IsDeleted = true
|
v
Controller chama ExcluirDocumentosDeletados()
|
v
Item removido da lista do ViewModel
|
v
Repository compara lista com banco
|
v
DbContext.Remove() -> DELETE fisico no banco
Impacto
Atencao
A exclusao e irreversivel. Uma vez que o item e removido, nao ha como recupera-lo sem um backup do banco de dados.
Pontos Importantes
- Sem auditoria de exclusao: O registro e completamente removido, sem historico
- Sem soft delete: Nao existe campo
AtivoouDeletadosendo usado para esta operacao - Cascata: A exclusao e apenas do vinculo
RomaneioDocumentoFiscal, oDocumentoFiscaloriginal permanece intacto
Arquivos Envolvidos
| Arquivo | Funcao |
|---|---|
RomaneioController.cs |
Chama ExcluirDocumentosDeletados() antes de salvar |
RomaneioViewModel.cs |
Define o metodo que remove itens da lista |
RomaneioDocumentoFiscalViewModel.cs |
Contem a propriedade IsDeleted |
RomaneioRepository.cs |
Executa o Remove() fisico no banco |
Referencias
Documentacao gerada em: 02/12/2025 Versao do Sistema: SGE 3.0