API‑only Backend für ein telemedizinisches Terminplanungssystem. Laravel 12, Octane mit FrankenPHP.
- Voraussetzungen
- Schnellstart
- Konfiguration
- Migrationen & Seeders
- Tests (Pest + PHPUnit)
- Insomnia-Collection
- PHP ≥ 8.4
- Composer ≥ 2.5
- Datenbank: MariaDB/MySQL oder SQLite
- Optional (empfohlen für Prod/Dev): Docker + Docker Compose
# 1) Abhängigkeiten
composer install
# 2) Environment anlegen
cp .env.example .env
php artisan key:generate
#3) Docker container starten
docker compose up -d --build
# 4) DB konfigurieren (.env) und migrieren & seeden
docker exec api php artisan migrate --seed
# API erreichbar unter http://localhostWichtige Variablen:
APP_NAME="Telemedicine Scheduling API"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
APP_TIMEZONE=UTC
# DB (Beispiel MariaDB)
DB_CONNECTION=mariadb
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=secret
# Rate Limit
RATE_LIMIT_PER_MINUTE=60
APPOINTMENT_LIMIT_PM=10
# Cache (Cluster/Octane: Redis empfohlen)
CACHE_DRIVER=redisFür Tests siehe Abschnitt Tests (separate
.env.testing).
Tabellen: specializations, doctors, time_slots, appointments (UUID‑PKs). Zeitangaben in UTC.
Seeders:
SpecializationSeederDoctorSeederTimeSlotSeeder(generiert Slots für die nächsten Tage)
Ausführen:
php artisan migrate --seed
# oder
php artisan migrate:fresh --seedAlle Antworten sind JSON. Beispiel-Fehler 404:
{"message":"Not Found"}Wir nutzen Pest v3 + PHPUnit 11.
tests/Pest.php (global):
uses(Tests\TestCase::class, Illuminate\Foundation\Testing\RefreshDatabase::class)->in('Feature','Unit');
beforeEach(function () {
$this->withoutMiddleware(Illuminate\Routing\Middleware\ThrottleRequests::class);
});.env.testing (SQLite In‑Memory):
APP_ENV=testing
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
CACHE_STORE=array
QUEUE_CONNECTION=sync
SESSION_DRIVER=array
MAIL_MAILER=arrayphpunit.xml (Env‑Overrides):
<php>
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>Tests ausführen:
./vendor/bin/pestEine Import‑Datei kann unter storage/insomnia_export.json abgelegt und über Insomnia → Import → From File geladen werden. Beispiel‑Environment‑Variablen: base_url, doctor_id, appointment_id, date.