??? 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

  1. GET /Agenda/Delete/{id} - Exibe tela de confirmação com detalhes
  2. Usuário clica em "Excluir" (submit do form)
  3. POST /Agenda/DeleteConfirmed/{id} - Executa exclusão
  4. 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)