feat: Implement API for managing network connections, device types, and uploads

This commit is contained in:
Troy Grunt
2026-02-06 17:56:57 +01:00
parent 5066262fca
commit 3ec3ad7fa5
11 changed files with 1460 additions and 11 deletions

View File

@@ -1,2 +1,86 @@
<?php
// Anzeige aller Verbindungen (Filter, Übersicht)
/**
* app/connections/list.php
*
* Übersicht der Netzwerkverbindungen
* - Einstieg in die Netzwerk-Topologie
* - Einbindung der SVG-Network-View
* - Später: Filter (VLAN, Standort, Gerätetyp)
*/
// TODO: Auth erzwingen (falls nicht global im bootstrap)
// requireAuth();
// TODO: Kontext bestimmen (Standort, Rack, gesamtes Netz)
// z.B. $contextId = get('context_id', 1);
// TODO: Daten ggf. serverseitig vorbereiten
// - Standorte
// - VLANs
// - Verbindungstypen
?>
<h2>Netzwerk-Topologie</h2>
<!-- =========================
Toolbar / Steuerung
========================= -->
<div class="toolbar">
<!-- TODO: Kontext-Auswahl (Standort / Stockwerk / Rack) -->
<!-- TODO: Filter (VLAN, Verbindungstyp, Modus) -->
<!-- TODO: Button: Verbindung anlegen -->
<!-- TODO: Button: Auto-Layout -->
</div>
<!-- =========================
Netzwerk-Ansicht
========================= -->
<div class="network-view-container">
<!--
SVG für network-view.js
network-view.js erwartet ein SVG mit ID #network-svg
-->
<svg
id="network-svg"
viewBox="0 0 2000 1000"
width="100%"
height="600"
>
<!-- wird komplett per JS gerendert -->
</svg>
</div>
<!-- =========================
Sidebar / Details
========================= -->
<aside class="sidebar">
<!-- TODO: Details zum ausgewählten Gerät anzeigen -->
<!--
- Gerätename
- Gerätetyp
- Ports
- VLANs
- Verbindungen
-->
<!-- TODO: Verbindung bearbeiten / löschen -->
</aside>
<!-- =========================
JS-Konfiguration
========================= -->
<script>
/**
* Konfiguration für network-view.js
* Wird bewusst hier gesetzt, nicht im JS selbst
*/
// TODO: Kontext-ID aus PHP setzen
// window.NETWORK_CONTEXT_ID = <?= (int)$contextId ?>;
</script>

View File

@@ -1,2 +1,103 @@
<?php
// Verbindung anlegen oder ändern
/**
* save.php
*
* Zentrale Save-Logik für:
* - SVG-Positionen (Geräte, Ports)
* - Netzwerk-Layouts
* - Rack-/Floor-Positionen
* - Sonstige UI-Zustände
*
* Erwartet JSON per POST
*/
// TODO: bootstrap laden
// require_once __DIR__ . '/bootstrap.php';
// TODO: Auth erzwingen
// requireAuth();
// =========================
// Request validieren
// =========================
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit;
}
// TODO: Content-Type prüfen (application/json)
// =========================
// Payload lesen
// =========================
$raw = file_get_contents('php://input');
// TODO: Fehlerbehandlung bei leerem Body
$data = json_decode($raw, true);
// TODO: JSON-Fehler prüfen
// if (json_last_error() !== JSON_ERROR_NONE) { ... }
// =========================
// Basisfelder prüfen
// =========================
// Erwartete Struktur (Beispiel):
/*
{
"type": "device_position" | "port_position" | "network_layout" | ...
"entity_id": 123,
"payload": { ... }
}
*/
// TODO: Pflichtfelder prüfen
// $type = $data['type'] ?? null;
// $entityId = $data['entity_id'] ?? null;
// $payload = $data['payload'] ?? null;
// =========================
// Routing nach Typ
// =========================
switch ($type ?? null) {
case 'device_position':
// TODO:
// - Gerät-ID validieren
// - SVG-Koordinaten speichern
// - ggf. Zoom / Rotation
break;
case 'port_position':
// TODO:
// - Device-Type-Port-ID
// - Koordinaten relativ zum SVG
break;
case 'network_layout':
// TODO:
// - Kontext (Standort / Rack)
// - Gerätepositionen
// - Verbindungskurven
break;
default:
http_response_code(400);
echo json_encode([
'error' => 'Unknown save type'
]);
exit;
}
// =========================
// Antwort
// =========================
// TODO: Erfolg / Fehler zurückgeben
echo json_encode([
'status' => 'ok'
]);