# Übersicht der Inhalt ### Fett markierte Verzeichnisse und deren Inhalt sind von besonderem Interesse - **api** - docs - API Dokumentation (openAPI 3.0) - Login - `Login.php` Endpunkt Klasse für `api/api/login` - Logout - `Logout.php` Endpunkt Klasse für `api/api/login` - Posts - `Posts.php` Endpunkt Klasse für `api/api/posts` - `Posts.php` Endpunkt Klasse für `api/api/posts/{id}` - Refresh - `Refresh.php` Endpunkt Klasse für `api/api/refresh` - Register - `Register.php` Endpunkt Klasse für `api/api/register` - Users - `Users.php` Endpunkt Klasse für `api/users` - `Users.php` Endpunkt Klasse für `api/users/{id}` - Image - `Image.php` Endpunkt Klasse für `api/users{id}/image` - Permissions - `Permissions.php` Endpunkt Klasse für `api/users/{id}/permissions` - Posts - `Posts.php` Endpunkt Klasse für `api/users{id}/posts` - `index.php` - API Einstiegspunkt - **classes** - Api - `Api.php`: Basisklasse für Endpunkte - ApiError - `ApiError.php`: Facade für Fehler die das Api zurück gibt - Auth - `AdminAuth.php`: Middleware für Authentifizierung zuzüglich Admin Rechte - `Auth.php`: Middleware für Authentifizierung - `OptAuth.php`: Middleware für optionale Authentifizierung - Config - `Config.php`: Singleton für Applikationskonfiguration - Database - `Database.php`: Singleton für Datenbankzugriffe (Wrapper um PDO) - GUID - `GUID.php`: Facade für GUID Algorithmen - Input - `Input.php`: Facade die SimpleRouters `Input` Klasse wrapped für einfacheren Zugriff auf häufig verwendete Methoden - Models - Post - `Post.php`: Modellklasse für Posts. Abstrahiert und kapselt Datenbankzugriffe - User - `User.php`: Modellklasse für User. Abstrahiert und kapselt Datenbankzugriffe - Request - `Request.php`: Facade die SimpleRouters `Request` Klasse wrapped für einfacheren Zugriff auf häufig verwendete Methoden - Response - `Response.php`: Facade die SimpleRouters `Response` Klasse wrapped für einfacheren Zugriff auf häufig verwendete Methoden - **config** - `app.php`: Applikationskonfiguration - `database.php`: Datenbankverbindungsdaten - dist - React Buildartefakte. - react - React Projekt - **routes** - `routes.php`: SimpleRouter Routenkonfiguration für die Applikation - storage: - Speicherort für Profilbilder - **utils**: - `helpers.php`: Kleine Helferlein - vendor: - Verzeichnis für Composer Pakete # Autoloader Verwendet wird hier der Composer Autoloader. Konfiguriert werden dessen Namespaces in der `composer.json`. Durch `composer dump-autoload` wird der Autoloader aktualisiert sollten neue Namespaces hinzugefügt werden. # Voraussetzungen um das React Projekt zu bauen - Node 18 - PNPM # Veränderungen Datenbank ## Tabelle `egb_benutzer` - Neue Spalten `token` (Auth token): VarChar(36), Nullable, UNIQUE Constraint - Neue Spalten `tokenExpiry` (Auth token verfall): DateTime, Nullable - Neue Spalten `refreshToken` (Auth refresh token): VarChar(36), Nullable, UNIQUE Constraint - Neue Spalten `refreshExpiry` (Auth refresh token verfall): VarChar(36), DateTime - Abänderung der Spalte `zeitstempel`: Entfernen des `ON UPDATE` (da sonst die Mitgliedszeit beim Ändern der Daten sich ändert) - Abänderung der Spalte `benutzername`: Non-Nullable gemacht, UNIQUE Constraint - Abänderung der Spalte `email`: Non-Nullable gemacht, UNIQUE Constraint - Abänderung der Spalte `passwort`: Non-Nullable gemacht - Abänderung der Spalte `confirmationcode`: Default auf `NULL` gesetzt ## Tabelle `egb_gaestebuch` - Abänderung der Spalte `benutzer_id`: Non-Nullable gemacht - Abänderung der Spalte `beitrag`: Non-Nullable gemacht - Hinzufüge eines Foreign Key Constraints auf `benutzer_id` mit CASCADE (Löschen des Users löscht Beiträge) # Notwendige Anpassung für die Verzeichnisstruktur eines anderen Hosters ## HTACCESS ### `.htaccess` - RewriteBase anpassen ### `react/public/.htaccess` - RewriteBase anpassen - **WICHTIG:** React Projekt neu bauen damit die Datei an den korrekten Platz kopiert wird ## PHP ### `classes/Models/User.php` - Link in der Confirmation E-Mail ### `config/app.php` - Alle Pfade ## JS **WICHTIG:** Nach allen Änderungen muss das React Projekt neu gebaut werden ### `react/vite.config.ts` - `base` Pfad ### `react/src/i18n.ts` - `loadPath` Pfad ### `react/src/main.tsx` - `createRouter.basepath` Pfad ### `react/src/api/Api.ts` - `BASE` API Url ### Projekt bauen ``` cd react pnpm install pnpm build ```