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

74 lines
4.8 KiB
PHP
Executable File

<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");
$db = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$action = $_GET["action"] ?? $_POST["action"] ?? "status";
try {
switch($action) {
case "status":
$inv = $db->query("SELECT asset_type, count(*) as cnt, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active FROM admin.supply_inventory GROUP BY asset_type")->fetchAll(PDO::FETCH_ASSOC);
$rules = $db->query("SELECT * FROM admin.supply_rules ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
$alerts = [];
foreach($rules as $r) {
$current = $db->prepare("SELECT count(*) FROM admin.supply_inventory WHERE asset_type=? AND status='active'");
$current->execute([$r["asset_type"]]);
$cnt = $current->fetchColumn();
if($cnt < $r["min_stock"]) $alerts[] = ["type"=>$r["asset_type"],"current"=>$cnt,"min"=>$r["min_stock"],"severity"=>"critical"];
}
echo json_encode(["status"=>"success","service"=>"auto-supply","inventory"=>$inv,"rules"=>$rules,"alerts"=>$alerts,"actions"=>["status","inventory","add_asset","remove_asset","rules","update_rule","check_stock","domains","o365_stock"]]);
break;
case "inventory":
$type = $_GET["type"] ?? null;
if($type) { $stmt=$db->prepare("SELECT * FROM admin.supply_inventory WHERE asset_type=? ORDER BY created_at DESC"); $stmt->execute([$type]); }
else { $stmt=$db->query("SELECT * FROM admin.supply_inventory ORDER BY asset_type, created_at DESC LIMIT 200"); }
echo json_encode(["status"=>"success","data"=>$stmt->fetchAll(PDO::FETCH_ASSOC)]);
break;
case "add_asset":
$d = json_decode(file_get_contents("php://input"), true) ?: $_POST;
$stmt = $db->prepare("INSERT INTO admin.supply_inventory (asset_type,asset_name,provider,status,purchase_date,expiry_date,cost,auto_renew,config,notes) VALUES (?,?,?,?,?,?,?,?,?,?) RETURNING id");
$stmt->execute([$d["asset_type"]??"",$d["asset_name"]??"",$d["provider"]??"",$d["status"]??"active",$d["purchase_date"]??date("Y-m-d"),$d["expiry_date"]??null,$d["cost"]??0,$d["auto_renew"]??false,json_encode($d["config"]??[]),$d["notes"]??""]);
echo json_encode(["status"=>"success","id"=>$stmt->fetch(PDO::FETCH_ASSOC)["id"]]);
break;
case "remove_asset":
$id = $_GET["id"] ?? $_POST["id"] ?? 0;
$db->prepare("UPDATE admin.supply_inventory SET status='retired' WHERE id=?")->execute([$id]);
echo json_encode(["status"=>"success","retired"=>$id]);
break;
case "rules":
$rows = $db->query("SELECT * FROM admin.supply_rules ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(["status"=>"success","data"=>$rows]);
break;
case "update_rule":
$d = json_decode(file_get_contents("php://input"), true) ?: $_POST;
$stmt = $db->prepare("UPDATE admin.supply_rules SET min_stock=?, max_stock=?, auto_buy=?, provider=? WHERE id=?");
$stmt->execute([$d["min_stock"]??5,$d["max_stock"]??50,$d["auto_buy"]??false,$d["provider"]??"",$d["id"]??0]);
echo json_encode(["status"=>"success"]);
break;
case "check_stock":
$results = [];
$rules = $db->query("SELECT * FROM admin.supply_rules WHERE status='active'")->fetchAll(PDO::FETCH_ASSOC);
foreach($rules as $r) {
$cnt = $db->prepare("SELECT count(*) FROM admin.supply_inventory WHERE asset_type=? AND status='active'");
$cnt->execute([$r["asset_type"]]); $current = $cnt->fetchColumn();
$status = $current >= $r["min_stock"] ? "ok" : ($current > 0 ? "low" : "critical");
$results[] = ["type"=>$r["asset_type"],"current"=>$current,"min"=>$r["min_stock"],"max"=>$r["max_stock"],"status"=>$status,"auto_buy"=>$r["auto_buy"],"provider"=>$r["provider"]];
}
echo json_encode(["status"=>"success","stock"=>$results]);
break;
case "domains":
$domains = $db->query("SELECT * FROM admin.supply_inventory WHERE asset_type='domain' ORDER BY status, created_at DESC")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(["status"=>"success","data"=>$domains]);
break;
case "o365_stock":
$total = $db->query("SELECT count(*) FROM admin.office_accounts")->fetchColumn();
$active = $db->query("SELECT count(*) FROM admin.office_accounts WHERE status='active'")->fetchColumn();
$tenants = $db->query("SELECT count(DISTINCT tenant_domain) FROM admin.office_accounts")->fetchColumn();
echo json_encode(["status"=>"success","total"=>$total,"active"=>$active,"tenants"=>$tenants]);
break;
default:
echo json_encode(["error"=>"Unknown action"]);
}
} catch(Exception $e) { echo json_encode(["error"=>$e->getMessage()]); }