🧪 Teste Endpoints de Exclusão

Testando os endpoints de exclusão que foram adicionados na API:

✅ Endpoints Adicionados

  • excluir_cliente - Excluir cliente com validações
  • excluir_motorista - Excluir motorista com validações
  • excluir_veiculo - Já existia, funcionando

🔧 Validações Implementadas

  • ✅ Verifica se o registro existe
  • ✅ Verifica se há viagens em andamento
  • ✅ Verifica se há veículos vinculados (clientes)
  • ✅ Verifica se há viagens vinculadas
  • ✅ Retorna mensagens de erro específicas

📋 Como Testar

1. Teste de Exclusão de Cliente
  1. Acesse Cadastros
  2. Vá para a aba "Clientes"
  3. Clique no botão "Excluir" (ícone lixeira) em qualquer cliente
  4. Confirme a exclusão
  5. Verifique se o cliente foi removido da lista
2. Teste de Exclusão de Motorista
  1. Vá para a aba "Motoristas"
  2. Clique no botão "Excluir" em qualquer motorista
  3. Confirme a exclusão
  4. Verifique se o motorista foi removido da lista
3. Teste de Exclusão de Veículo
  1. Vá para a aba "Veículos"
  2. Clique no botão "Excluir" em qualquer veículo
  3. Confirme a exclusão
  4. Verifique se o veículo foi removido da lista

🔍 Log de Mudanças

1. Endpoint excluir_cliente
case 'excluir_cliente':
    // Excluir cliente
    $pdo = conectarBanco();
    
    if ($metodo === 'POST') {
        $input = json_decode(file_get_contents('php://input'), true);
        
        if (!$input || !isset($input['id'])) {
            resposta(false, null, 'ID do cliente é obrigatório', 400);
        }
        
        $id = intval($input['id']);
        
        if ($id <= 0) {
            resposta(false, null, 'ID do cliente inválido', 400);
        }
        
        try {
            // Verificar se o cliente existe
            $stmt = $pdo->prepare("SELECT id, nome FROM clientes WHERE id = ?");
            $stmt->execute([$id]);
            $cliente = $stmt->fetch();
            
            if (!$cliente) {
                resposta(false, null, 'Cliente não encontrado', 404);
            }
            
            // Verificar se há veículos vinculados a este cliente
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total 
                FROM veiculos 
                WHERE cliente_contrato_id = ?
            ");
            $stmt->execute([$id]);
            $veiculosVinculados = $stmt->fetch()['total'];
            
            if ($veiculosVinculados > 0) {
                resposta(false, null, 'Não é possível excluir cliente com veículos vinculados', 400);
            }
            
            // Verificar se há viagens vinculadas a este cliente
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total 
                FROM viagens 
                WHERE cliente_id = ? OR cliente = (SELECT nome FROM clientes WHERE id = ?)
            ");
            $stmt->execute([$id, $id]);
            $viagensVinculadas = $stmt->fetch()['total'];
            
            if ($viagensVinculadas > 0) {
                resposta(false, null, 'Não é possível excluir cliente com viagens vinculadas', 400);
            }
            
            // Excluir cliente
            $stmt = $pdo->prepare("DELETE FROM clientes WHERE id = ?");
            $stmt->execute([$id]);
            
            if ($stmt->rowCount() > 0) {
                resposta(true, null, "Cliente {$cliente['nome']} excluído com sucesso");
            } else {
                resposta(false, null, 'Erro ao excluir cliente', 500);
            }
            
        } catch (Exception $e) {
            resposta(false, null, 'Erro ao excluir cliente: ' . $e->getMessage(), 500);
        }
    } else {
        resposta(false, null, 'Método não suportado', 405);
    }
    break;
2. Endpoint excluir_motorista
case 'excluir_motorista':
    // Excluir motorista
    $pdo = conectarBanco();
    
    if ($metodo === 'POST') {
        $input = json_decode(file_get_contents('php://input'), true);
        
        if (!$input || !isset($input['id'])) {
            resposta(false, null, 'ID do motorista é obrigatório', 400);
        }
        
        $id = intval($input['id']);
        
        if ($id <= 0) {
            resposta(false, null, 'ID do motorista inválido', 400);
        }
        
        try {
            // Verificar se o motorista existe
            $stmt = $pdo->prepare("SELECT id, nome FROM motoristas WHERE id = ?");
            $stmt->execute([$id]);
            $motorista = $stmt->fetch();
            
            if (!$motorista) {
                resposta(false, null, 'Motorista não encontrado', 404);
            }
            
            // Verificar se há viagens em andamento
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total 
                FROM viagens 
                WHERE motorista_id = ? AND data_fim IS NULL
            ");
            $stmt->execute([$id]);
            $viagensAtivas = $stmt->fetch()['total'];
            
            if ($viagensAtivas > 0) {
                resposta(false, null, 'Não é possível excluir motorista com viagens em andamento', 400);
            }
            
            // Verificar se há viagens vinculadas a este motorista
            $stmt = $pdo->prepare("
                SELECT COUNT(*) as total 
                FROM viagens 
                WHERE motorista_id = ? OR motorista = (SELECT nome FROM motoristas WHERE id = ?)
            ");
            $stmt->execute([$id, $id]);
            $viagensVinculadas = $stmt->fetch()['total'];
            
            if ($viagensVinculadas > 0) {
                resposta(false, null, 'Não é possível excluir motorista com viagens vinculadas', 400);
            }
            
            // Excluir motorista
            $stmt = $pdo->prepare("DELETE FROM motoristas WHERE id = ?");
            $stmt->execute([$id]);
            
            if ($stmt->rowCount() > 0) {
                resposta(true, null, "Motorista {$motorista['nome']} excluído com sucesso");
            } else {
                resposta(false, null, 'Erro ao excluir motorista', 500);
            }
            
        } catch (Exception $e) {
            resposta(false, null, 'Erro ao excluir motorista: ' . $e->getMessage(), 500);
        }
    } else {
        resposta(false, null, 'Método não suportado', 405);
    }
    break;
3. Fluxo de Funcionamento
  1. Usuário clica em "Excluir" → JavaScript chama API
  2. API recebe POST com ID do registro
  3. API valida se o registro existe
  4. API verifica se há vínculos (viagens, veículos)
  5. Se não há vínculos, exclui o registro
  6. Retorna sucesso e atualiza a lista