210 lines
7.5 KiB
PHP
Executable File
210 lines
7.5 KiB
PHP
Executable File
<?php
|
|
require_once("/opt/wevads/config/credentials.php");
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
|
|
$db_config = [
|
|
'host' => 'localhost',
|
|
'dbname' => 'wevads',
|
|
'user' => 'admin',
|
|
'password' => WEVADS_DB_PASS
|
|
];
|
|
|
|
try {
|
|
$pdo = new PDO(
|
|
"pgsql:host={$db_config['host']};dbname={$db_config['dbname']}",
|
|
$db_config['user'],
|
|
$db_config['password'],
|
|
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
|
|
);
|
|
|
|
$pdo->exec("SET search_path TO admin, public;");
|
|
|
|
$action = $_GET['action'] ?? 'list';
|
|
|
|
switch ($action) {
|
|
case 'list':
|
|
$type = $_GET['type'] ?? 'all';
|
|
|
|
$query = "SELECT * FROM admin.deepseek_datasets";
|
|
$params = [];
|
|
|
|
if ($type !== 'all') {
|
|
$query .= " WHERE dataset_type = :type";
|
|
$params[':type'] = $type;
|
|
}
|
|
|
|
$query .= " ORDER BY created_at DESC";
|
|
|
|
$stmt = $pdo->prepare($query);
|
|
$stmt->execute($params);
|
|
$datasets = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// Statistiques des datasets
|
|
$stats = $pdo->query("
|
|
SELECT
|
|
dataset_type,
|
|
COUNT(*) as count,
|
|
SUM(total_records) as total_records,
|
|
ROUND(AVG(total_records), 0) as avg_records
|
|
FROM admin.deepseek_datasets
|
|
GROUP BY dataset_type
|
|
")->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'datasets' => $datasets,
|
|
'statistics' => $stats,
|
|
'summary' => [
|
|
'total_datasets' => count($datasets),
|
|
'total_records' => array_sum(array_column($datasets, 'total_records')),
|
|
'types' => array_unique(array_column($datasets, 'dataset_type'))
|
|
]
|
|
]);
|
|
break;
|
|
|
|
case 'create':
|
|
$input = json_decode(file_get_contents('php://input'), true);
|
|
|
|
if (!$input || !isset($input['name']) || !isset($input['dataset_type'])) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Données invalides']);
|
|
break;
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
INSERT INTO admin.deepseek_datasets
|
|
(name, dataset_type, total_records, columns, description)
|
|
VALUES (:name, :type, :records, :columns, :description)
|
|
RETURNING id
|
|
");
|
|
|
|
$stmt->execute([
|
|
':name' => $input['name'],
|
|
':type' => $input['dataset_type'],
|
|
':records' => $input['total_records'] ?? 0,
|
|
':columns' => json_encode($input['columns'] ?? []),
|
|
':description' => $input['description'] ?? ''
|
|
]);
|
|
|
|
$datasetId = $stmt->fetchColumn();
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'Dataset créé avec succès',
|
|
'dataset_id' => $datasetId,
|
|
'import_url' => '/api/deepseek-datasets.php?action=import&dataset_id=' . $datasetId
|
|
]);
|
|
break;
|
|
|
|
case 'import':
|
|
$datasetId = $_GET['dataset_id'] ?? null;
|
|
$source = $_GET['source'] ?? 'file';
|
|
|
|
if (!$datasetId) {
|
|
echo json_encode(['status' => 'error', 'message' => 'dataset_id requis']);
|
|
break;
|
|
}
|
|
|
|
// Simulation d'import
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'message' => 'Import démarré',
|
|
'dataset_id' => $datasetId,
|
|
'source' => $source,
|
|
'progress' => '0%',
|
|
'estimated_records' => 10000,
|
|
'estimated_time' => '5-10 minutes'
|
|
]);
|
|
break;
|
|
|
|
case 'features':
|
|
$datasetId = $_GET['dataset_id'] ?? null;
|
|
|
|
$query = "SELECT * FROM admin.deepseek_features";
|
|
$params = [];
|
|
|
|
if ($datasetId) {
|
|
// Dans une vraie implémentation, on lierait les features au dataset
|
|
$query .= " WHERE 1=1"; // Placeholder
|
|
$params[':dataset_id'] = $datasetId;
|
|
}
|
|
|
|
$query .= " ORDER BY importance_score DESC";
|
|
|
|
$stmt = $pdo->prepare($query);
|
|
$stmt->execute($params);
|
|
$features = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'features' => $features,
|
|
'feature_categories' => [
|
|
'email_metrics' => ['opens_rate', 'clicks_rate', 'complaints'],
|
|
'domain_metrics' => ['spf', 'dkim', 'dmarc', 'reputation'],
|
|
'content_metrics' => ['sentiment', 'readability', 'spam_score']
|
|
]
|
|
]);
|
|
break;
|
|
|
|
case 'analyze':
|
|
$datasetId = $_GET['dataset_id'] ?? null;
|
|
|
|
if (!$datasetId) {
|
|
echo json_encode(['status' => 'error', 'message' => 'dataset_id requis']);
|
|
break;
|
|
}
|
|
|
|
// Simulation d'analyse
|
|
$analysis = [
|
|
'dataset_id' => $datasetId,
|
|
'record_count' => rand(10000, 500000),
|
|
'feature_count' => rand(10, 50),
|
|
'missing_values' => rand(1, 5) . '%',
|
|
'data_types' => [
|
|
'numerical' => rand(60, 80) . '%',
|
|
'categorical' => rand(15, 30) . '%',
|
|
'text' => rand(5, 15) . '%'
|
|
],
|
|
'recommendations' => [
|
|
'Normaliser les features numériques',
|
|
'Encoder les variables catégorielles',
|
|
'Gérer les valeurs manquantes'
|
|
]
|
|
];
|
|
|
|
echo json_encode([
|
|
'status' => 'success',
|
|
'analysis' => $analysis,
|
|
'visualization_url' => '/api/deepseek-datasets.php?action=visualize&dataset_id=' . $datasetId
|
|
]);
|
|
break;
|
|
|
|
default:
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Action non reconnue',
|
|
'endpoints' => [
|
|
'GET ?action=list&type=email' => 'Liste des datasets',
|
|
'POST ?action=create' => 'Créer un dataset',
|
|
'GET ?action=import&dataset_id=X&source=file' => 'Importer des données',
|
|
'GET ?action=features&dataset_id=X' => 'Features du dataset',
|
|
'GET ?action=analyze&dataset_id=X' => 'Analyser le dataset'
|
|
]
|
|
]);
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
echo json_encode([
|
|
'status' => 'error',
|
|
'message' => 'Erreur base de données: ' . $e->getMessage(),
|
|
'fallback' => [
|
|
'status' => 'datasets_fallback',
|
|
'datasets' => [
|
|
['id' => 1, 'name' => 'Email Deliverability', 'type' => 'email', 'records' => 1500000],
|
|
['id' => 2, 'name' => 'Domain Reputation', 'type' => 'domain', 'records' => 500000]
|
|
]
|
|
]
|
|
]);
|
|
}
|
|
?>
|