Files
wevads-platform/scripts/api_account-factory.php
2026-02-26 04:53:11 +01:00

38 lines
3.3 KiB
PHP
Executable File

<?php
header('Content-Type: application/json');
$input=json_decode(file_get_contents('php://input'),true)?:($_POST?:$_GET); $action=$input['action']??'stats';
try{$db=new PDO("pgsql:host=127.0.0.1;dbname=adx_system",'postgres','');$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}
catch(Exception $e){die(json_encode(['error'=>$e->getMessage()]));}
switch($action){
case 'stats':
$o=intval($db->query("SELECT COUNT(*) FROM admin.office_accounts")->fetchColumn());
$oa=intval($db->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status='active'")->fetchColumn());
$p=intval($db->query("SELECT COUNT(*) FROM admin.personas")->fetchColumn());
$d=0;try{$d=intval($db->query("SELECT COUNT(*) FROM admin.domains_pool")->fetchColumn());}catch(Exception $e){}
$q=0;try{$q=intval($db->query("SELECT COUNT(*) FROM admin.account_factory_queue WHERE status='pending'")->fetchColumn());}catch(Exception $e){}
echo json_encode(['o365'=>['total'=>$o,'active'=>$oa],'personas'=>$p,'domains'=>$d,'queue_pending'=>$q,
'supply_health'=>$oa>500?'healthy':($oa>100?'warning':'critical')]); break;
case 'generate_personas':
$n=min($input['count']??10,100);$c=$input['country']??'FR';$cr=0;
$names_fr=[['Marie','Dubois','F'],['Jean','Martin','M'],['Sophie','Bernard','F'],['Pierre','Petit','M'],['Thomas','Richard','M'],['Emma','Laurent','F'],['Nicolas','Moreau','M'],['Camille','Durand','F'],['Lucas','Simon','M'],['Hugo','Leroy','M']];
$names_de=[['Hans','Mueller','M'],['Anna','Schmidt','F'],['Peter','Fischer','M'],['Sabine','Weber','F']];
$pool=$c==='DE'?$names_de:$names_fr;
for($i=0;$i<$n;$i++){$nm=$pool[array_rand($pool)];$fn=$nm[0];$ln=$nm[1].rand(1,99);
try{$db->prepare("INSERT INTO admin.personas(first_name,last_name,full_name,email_prefix,gender,country)VALUES(?,?,?,?,?,?)")
->execute([$fn,$ln,"$fn $ln",strtolower("$fn.$ln"),$nm[2],$c]);$cr++;}catch(Exception $e){}}
echo json_encode(['created'=>$cr,'country'=>$c]); break;
case 'list_personas': echo json_encode($db->query("SELECT * FROM admin.personas ORDER BY id DESC LIMIT ".intval($input['limit']??50))->fetchAll(PDO::FETCH_ASSOC)); break;
case 'check_supply':
$oa=intval($db->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status='active'")->fetchColumn());
$d=0;try{$d=intval($db->query("SELECT COUNT(*) FROM admin.domains_pool WHERE status IN ('active','ACTIVE','ASSIGNED')")->fetchColumn());}catch(Exception $e){}
$p=intval($db->query("SELECT COUNT(*) FROM admin.personas WHERE status='active'")->fetchColumn());
$alerts=[];
if($oa<100)$alerts[]=['type'=>'critical','resource'=>'O365','count'=>$oa];
elseif($oa<500)$alerts[]=['type'=>'warning','resource'=>'O365','count'=>$oa];
if($d<3)$alerts[]=['type'=>'warning','resource'=>'Domains','count'=>$d];
echo json_encode(['o365'=>$oa,'domains'=>$d,'personas'=>$p,'alerts'=>$alerts,'health'=>empty($alerts)?'healthy':'warning']); break;
case 'cloud_providers': echo json_encode($db->query("SELECT name,provider_type,status,config FROM admin.cloud_providers ORDER BY id")->fetchAll(PDO::FETCH_ASSOC)); break;
default: echo json_encode(['actions'=>['stats','generate_personas','list_personas','check_supply','cloud_providers']]);
}
?>