- Event-Medien tragen Typ (image/video/audio), Dauer und Notiz; Videos bekommen ein Poster, Audio wird per ffmpeg nach AAC (audio/mp4) gewandelt, Originale werden mit Range-Unterstützung gestreamt. - Upload nimmt eine Notiz (caption) direkt mit, PATCH ändert sie später. - Neue Event-Felder: Zeitraum (end_date), Kategorie, Personen, Meilenstein. Regeln zentral in EventFields, damit CRUD und Sync gleich prüfen. - Titel darf leer sein: ein Event entsteht mit dem ersten Eintrag. - Artisan-Befehl media:transcode-voice-notes wandelt alte WebM/Ogg-Notizen, die Safari nicht abspielen kann. - Login-Throttling, Settings-Validierung, Sync-Fehlercodes ohne Rohtext. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
33 lines
1.7 KiB
PHP
33 lines
1.7 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Api\AuthController;
|
|
use App\Http\Controllers\Api\EventController;
|
|
use App\Http\Controllers\Api\EventMediaController;
|
|
use App\Http\Controllers\Api\SettingsController;
|
|
use App\Http\Controllers\Api\SettingsMediaController;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
Route::post('/login', [AuthController::class, 'login'])->middleware('throttle:api');
|
|
|
|
Route::middleware(['auth:api', 'throttle:api'])->group(function () {
|
|
Route::get('/user', fn (Request $request) => $request->user());
|
|
Route::post('/logout', [AuthController::class, 'logout']);
|
|
Route::get('/settings', [SettingsController::class, 'show']);
|
|
Route::put('/settings', [SettingsController::class, 'update']);
|
|
Route::get('/settings/media/background', [SettingsMediaController::class, 'show']);
|
|
Route::post('/settings/media/background', [SettingsMediaController::class, 'store'])
|
|
->middleware('throttle:uploads');
|
|
Route::delete('/settings/media/background', [SettingsMediaController::class, 'destroy']);
|
|
Route::get('/event-media/{media}/{variant}', [EventMediaController::class, 'show']);
|
|
Route::get('/events/{clientId}/media', [EventMediaController::class, 'index']);
|
|
Route::post('/events/{clientId}/media', [EventMediaController::class, 'store'])
|
|
->middleware('throttle:uploads');
|
|
Route::patch('/events/{clientId}/media/{media}', [EventMediaController::class, 'update']);
|
|
Route::delete('/events/{clientId}/media/{media}', [EventMediaController::class, 'destroy']);
|
|
|
|
Route::apiResource('events', EventController::class)->parameters([
|
|
'events' => 'clientId',
|
|
]);
|
|
Route::post('/events/sync', [EventController::class, 'sync']);
|
|
});
|