Tela: Confirmar Exclusão de Evento (/Agenda/Delete/{id})
??? Tela: Confirmar Exclusão de Evento
Rota: /Agenda/Delete/{id}
Método HTTP: GET (exibir confirmação) / POST (executar exclusão)
Permissão necessária: Administrador ou Gerente
?? Visão Geral da Tela
Tela de confirmação de exclusão (delete confirmation) exibindo detalhes do evento antes da ação destrutiva. Segue padrão de segurança com GET para exibir e POST para confirmar.
?? Elementos da Interface
1. Cabeçalho da Página
- Breadcrumb: Home ? Agenda ? Excluir
- Título: "Excluir Evento" (ícone ti-trash)
- Subtitle: Título do evento a ser excluído (small, muted)
- Botão secundário: "Voltar" (link para /Agenda/Details/{id})
2. Layout da Tela
Centralizado em col-lg-8:
- Card único com confirmação e detalhes
- Formulário POST inline
?? Conteúdo do Card
Mensagem de Confirmação
- Título (h5): "Você tem certeza que deseja excluir este evento?"
- Aviso (p.text-muted): "Esta ação não poderá ser desfeita."
Resumo do Evento
Lista não ordenada com detalhes-chave do evento:
| Campo | Formato |
|---|---|
| Título | Model.Titulo |
| Data | dd/MM/yyyy (Model.DataEvento) |
| Horário | Model.HoraEvento ou "-" |
| Local | Model.Local ou "-" |
Formulário de Confirmação
<form asp-action="DeleteConfirmed" asp-route-id="@Model.Id" method="post">
@Html.AntiForgeryToken()
<div class="d-flex gap-2">
<button type="submit" class="btn btn-danger">
<i class="ti ti-trash"></i> Excluir
</button>
<a href="@Url.Action("Details", "Agenda", new { id = Model.Id })" class="btn btn-light">
Cancelar
</a>
</div>
</form>
?? Funcionalidades
Fluxo de Exclusão
- GET /Agenda/Delete/{id} - Exibe tela de confirmação com detalhes
- Usuário clica em "Excluir" (submit do form)
- POST /Agenda/DeleteConfirmed/{id} - Executa exclusão
- Redirect para /Agenda/Index com TempData de sucesso
Antiforgery Token
Token CSRF obrigatório via @Html.AntiForgeryToken() para proteger contra ataques CSRF.
?? Notificações e Feedback
Sucesso
Alert verde dismissível após exclusão: "Evento excluído com sucesso!" (via TempData)
Erro
Alert vermelho dismissível: "Erro ao excluir evento: {mensagem}" (via TempData)
?? Regras de Negócio
- Evento deve existir e pertencer ao tenant
- Apenas admin/gerente pode excluir
- Exclusão pode ser soft delete (IsDeleted = true) ou hard delete
- Evento com participantes confirmados pode gerar warning antes de excluir
- Se evento não encontrado, redireciona para Index com erro
- Action name: "DeleteConfirmed" (não "Delete") para evitar conflito com GET
?? Integração com API
GET /Agenda/Delete/{id}
- Retorna view com Model (Evento)
- Validação: Evento existe e pertence ao tenant
- Redirect para Index se não encontrado
POST /Agenda/DeleteConfirmed/{id}
- Route parameter: id
- Antiforgery token obrigatório
- Executa exclusão no banco
- TempData com mensagem de sucesso/erro
- Redirect para /Agenda/Index
?? Navegação
- Ao confirmar exclusão: Redireciona para /Agenda/Index
- Ao clicar em "Cancelar": Redireciona para /Agenda/Details/{id}
- Ao clicar em "Voltar": Redireciona para /Agenda/Details/{id}
- Breadcrumb Home: /Dashboard/Index
- Breadcrumb Agenda: /Agenda/Index
?? Responsividade
- Card centralizado em col-lg-8 (responsivo)
- Botões com gap-2 (quebra linha em mobile se necessário)
?? Bibliotecas Externas
- Bootstrap 5: Grid, cards, buttons
- Tabler Icons: Ícones de interface
?? Segurança
- Antiforgery token em POST
- Validação de tenant_id no backend
- Confirmação explícita antes de ação destrutiva
- GET não executa exclusão (apenas exibe confirmação)
- POST com nome de action diferente (DeleteConfirmed)