4 Projektstruktur
muke edited this page 2026-03-01 18:41:27 +01:00

# Projektstruktur - Verzeichnisse & Komponenten

Dieses Dokument beschreibt die empfohlene Verzeichnisstruktur für PhorgeRunner.
Ziel: Übersicht, Erweiterbarkeit und einfache Wartung.


Verzeichnis-Übersicht

phorgerunner/
├── /config/              # Zentrale Konfigurationsdateien
│   ├── config.template.php      # Vorlage (versioniert)
│   ├── config.php               # Lokale Konfiguration (git-ignoriert!)
│   └── custom_fields.php        # Optional: benutzerdefinierte Felder
│
├── /src/                 # Alle PHP-Klassen (OOP)
│   ├── Autoloader.php           # PSR-4 Autoloader
│   ├── Database/
│   │   └── DBManager.php        # Datenbank-Zugriff (PDO)
│   ├── Log/
│   │   └── LogManager.php       # Logging (DB, Datei, Konsole)
│   └── Tasks/
│       ├── AbstractTask.php     # Basis-Klasse für alle Tasks
│       ├── ManiphestCreateTask.php
│       ├── ManiphestSearchTask.php
│       └── [weitere Tasks...]   # Erweiterbar
│
├── /cli/                 # Einstiegspunkte für CLI/Cronjobs
│   └── main.php                 # Standard-Entry-Point
│
├── /public/              # (Zukünftig) Web-Frontend
│   ├── index.php                # Einstiegspunkt für Web
│   ├── .htaccess                # Zugriffsschutz
│   └── assets/                  # CSS, JS (später)
│
├── /sql/                 # Datenbank-Schema
│   └── create.sql               # MariaDB Tabellendefinitionen
│
├── /logs/                # Log-Dateien (falls Datei-Logging aktiv)
│   ├── app.log                  # Allgemeine Logs
│   └── error.log                # Error-Logs
│
├── .gitignore            # Git-Ausschlüsse (config.php, logs, *.log)
├── readme.md             # Projekt-Überblick
└── search.test.php       # Utility zum Testen der API (lokal)

Detaillierte Beschreibung

/config/

Enthält alle Konfigurationsdateien. Die echte config.php steht in .gitignore, damit keine Zugangsdaten im Repo landen.

  • config.template.php - Vorlage mit Kommentaren, wird versioniert
  • config.php - Lokale Konfiguration mit echten Werten (Secrets!)
  • custom_fields.php - Optional: benutzerdefinierte Phorge-Felder

/src/

Alle zentralen PHP-Klassen. Organisiert nach Funktion:

Autoloader.php

  • PSR-4 Autoloader für den App\-Namespace
  • Definiert globale Konstanten: BASE_DIR, CONFIG_DIR, CONFIG_FILE

Database/DBManager.php

  • PDO-Wrapper für sichere Datenbank-Operationen
  • Methoden: query(), fetch(), fetchAll(), insert(), update(), delete()
  • Automatische Prepared Statements gegen SQL-Injection

Log/LogManager.php

  • Zentrales Logging-System
  • Unterstützt: DB, Datei, Konsole
  • Jeder Log-Eintrag hat Fingerprint, Job-ID, Severity, Channel

Tasks/

  • AbstractTask.php - Basis-Klasse für alle Task-Implementierungen
    • Lädt Config & DB
    • Generiert Fingerprint
    • Bietet execute() Wrapper & API-Helper
    • Zentral für Logging
  • ManiphestCreateTask.php - Erstellt Tickets via API
  • ManiphestSearchTask.php - Sucht Tickets via API
  • [weitere Tasks] - Beliebig erweiterbar

/cli/

Einstiegspunkte für Aufgaben, die via Kommandozeile oder Cron laufen.

  • main.php - Standard-Bootstrapper, lädt Autoloader
  • Jedes Cron-Job-Skript kann von hier aus starten

/public/

(Zukünftiges) Web-Frontend für Log-Anzeige und Status-Checks.

  • index.php - Einstiegspunkt für HTTP-Anfragen
  • .htaccess - Zugriffsschutz (z.B. IP-Whitelist, HTTP-Auth)
  • assets/ - CSS, JavaScript (später)

/sql/

Datenbank-Schema für MariaDB.

  • create.sql - Tabellendefinitionen
    • jobs - Wiederholbare Aufgaben
    • jobs_runplan - Ausführungs-Protokoll
    • logs - Zentrale Log-Tabelle
    • settings - Optional: globale Einstellungen

/logs/

Log-Dateien (nur nötig, falls Datei-Logging aktiv).

  • Standard: app.log, error.log
  • Verzeichnis wird automatisch erstellt

Warum diese Struktur?

Klare Separierung - Business-Logik, Datenhaltung, Einstiegspunkte sind getrennt
Erweiterbarkeit - neue Tasks/Manager einfach hinzufügbar
Sicherheit - Secrets in .gitignore, Web-Frontend isoliert
Wartbarkeit - einheitliche PSR-4 Struktur
Zukunftssicher - vorbereitet für Containerisierung, neue Features


Siehe auch: Projektziele, Überblick