No description
  • PHP 65.9%
  • Vue 17.1%
  • JavaScript 14.1%
  • CSS 2.4%
  • Blade 0.4%
Find a file
Sören 35cbebb3c2 Sitz-Prüfung: misst, ob die Elemente gut sitzen
Kontrast und Überlauf prüft optik.js. npm run sitz sucht die andere
Hälfte dessen, was „optisch" heißt, über 22 Seiten und drei Breiten:
abgeschnittene Beschriftungen, überlappende Nachbarn, Trefferflächen
unter 24 Pixeln, Schaltflächen ungleicher Höhe in einer Reihe, Textzeilen
über 110 Zeichen und Felder, die aus ihrer Karte ragen.

Die Funde dieser Runde sind bereits eingearbeitet; die Prüfung läuft
jetzt ohne Befund und hält den Stand fest.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-26 16:13:30 +01:00
backend Durchgang durch die Oberfläche – und drei Funde daraus 2026-10-25 08:18:44 +01:00
docs Benutzerhandbuch als Word-Datei und als PDF 2026-10-24 21:07:04 +02:00
frontend Sitz-Prüfung: misst, ob die Elemente gut sitzen 2026-10-26 16:13:30 +01:00
.gitignore Benutzerhandbuch als Word-Datei und als PDF 2026-10-24 21:07:04 +02:00
README.md Modelle: Anwendungsfälle, Abläufe, Klassen, ER - und zwölf Befunde 2026-10-24 11:39:56 +02:00

PrüfungsWerk

Zwei eigenständige Anwendungen, die ausschließlich über eine JSON-API miteinander sprechen:

Ordner Technologie Aufgabe
backend/ Laravel 13 (PHP 8.3+), Sanctum API, Authentifizierung, Datenhaltung
frontend/ Vue 3.5 SPA, Vite 8, Pinia 4, Vue Router 5 Oberfläche, konsumiert die API

Der Aufbau folgt der Struktur aus struktur-vorlage/ (getrennte Backend-/Frontend-Projekte, Token-Authentifizierung über Sanctum, rollenbasierte Middleware, gestaffelte Rate Limits, Service-/Store-Schicht im Frontend). Übernommen wurde nur das Strukturmuster, keine Inhalte.

Architektur

Vue-SPA (Port 5173)                     Laravel-API (Port 8080)
┌───────────────────────────┐           ┌──────────────────────────────┐
│ views/        Seiten      │           │ routes/api.php               │
│ components/   Bausteine   │           │ Middleware: role, rate.limit │
│ stores/       Pinia       │  HTTP     │ Controllers → Services       │
│ services/     API-Aufrufe │ ────────► │ Form Requests (Validierung)  │
│ apiClient.js  axios       │  JSON     │ API Resources (Ausgabe)      │
│ router/       Guards      │           │ Models (Eloquent)            │
└───────────────────────────┘           └──────────────────────────────┘
        Bearer-Token aus /api/auth/login (Laravel Sanctum)

Im Entwicklungsbetrieb leitet der Vite-Proxy alle Aufrufe auf /api an http://localhost:8080 weiter; in Produktion wird die vollständige URL aus VITE_API_BASE_URL verwendet.

Schnellstart

Voraussetzungen: PHP ≥ 8.3 mit pdo_mysql, Composer, Node ≥ 22, MySQL/MariaDB.

# 1. Datenbanken anlegen (einmalig, als Datenbank-Administrator)
#    Details und Benutzeranlage: backend/README.md
sudo mariadb -e "CREATE DATABASE \`PruefungsWerk\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 2. Backend
cd backend
cp .env.example .env            # falls noch nicht vorhanden
php artisan key:generate
# DB_PASSWORD in .env eintragen
php artisan migrate --seed
php artisan serve --port=8080

# 3. Frontend (zweites Terminal)
cd frontend
npm install
npm run dev                     # http://localhost:5173

Die Seeder legen drei Demo-Konten an (Passwort jeweils password):

E-Mail Rolle Bezeichnung
admin@pruefungswerk.test admin Administrator
dozent@pruefungswerk.test dozent Dozierende
teilnehmende@pruefungswerk.test teilnehmende Teilnehmende

API-Überblick

Methode Pfad Zugriff
GET /api/health öffentlich
POST /api/auth/login öffentlich
POST /api/auth/logout Token
POST /api/auth/logout-all Token
POST /api/auth/refresh Token
GET /api/auth/user Token
GET /api/auth/check Token
GET /api/options Token
GET/PUT /api/settings/profile Token
DELETE /api/settings/profile Token
PUT /api/settings/password Token
GET /api/admin/dashboard/stats Rolle admin
CRUD /api/admin/users Rolle admin
CRUD /api/admin/roles Rolle admin

Antwortformat: { "success": true, "message": "…", "data": … }, Fehler mit { "success": false, "message": "…", "errors": { … } }. Listen-Endpunkte liefern zusätzlich den meta-Block der Laravel-Paginierung.

Tests

cd backend  && php artisan test     # PHPUnit (benötigt Testdatenbank, s. backend/README.md)
cd frontend && npm run test:unit    # Vitest

Ordner