- 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>
46 lines
1.3 KiB
PHP
46 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Database\Factories;
|
|
|
|
use App\Models\Event;
|
|
use App\Models\User;
|
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
|
use Illuminate\Support\Str;
|
|
|
|
/**
|
|
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\EventMedia>
|
|
*/
|
|
class EventMediaFactory extends Factory
|
|
{
|
|
/**
|
|
* Define the model's default state.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function definition(): array
|
|
{
|
|
$user = User::factory();
|
|
|
|
return [
|
|
'uuid' => (string) Str::uuid(),
|
|
'user_id' => $user,
|
|
'event_id' => Event::factory()->for($user),
|
|
'collection' => 'gallery',
|
|
'type' => 'image',
|
|
'name' => fake()->word().'.jpg',
|
|
'mime_type' => 'image/jpeg',
|
|
'disk' => 'local',
|
|
'path' => 'event-media/test/original.jpg',
|
|
'thumbnail_path' => 'event-media/test/thumb.jpg',
|
|
'preview_path' => 'event-media/test/preview.jpg',
|
|
'size' => 12345,
|
|
'duration_ms' => null,
|
|
'width' => 1200,
|
|
'height' => 800,
|
|
'thumbnail_width' => 320,
|
|
'thumbnail_height' => 320,
|
|
'preview_width' => 900,
|
|
'preview_height' => 600,
|
|
];
|
|
}
|
|
}
|