Testando os endpoints de exclusão que foram adicionados na API:
excluir_cliente - Excluir cliente com validaçõesexcluir_motorista - Excluir motorista com validaçõesexcluir_veiculo - Já existia, funcionandocase '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;
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;