- 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>
52 lines
1.4 KiB
PHP
52 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Database\Seeder;
|
|
use Laravel\Passport\Client;
|
|
use Laravel\Passport\ClientRepository;
|
|
|
|
class DatabaseSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Seed the application's database.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
User::query()->updateOrCreate(
|
|
['email' => 'test@example.com'],
|
|
[
|
|
'name' => 'Test User',
|
|
'email_verified_at' => now(),
|
|
'password' => 'password',
|
|
],
|
|
);
|
|
|
|
foreach (range(1, 6) as $number) {
|
|
User::query()->updateOrCreate(
|
|
['email' => "user{$number}@thats-me.app"],
|
|
[
|
|
'name' => "User {$number}",
|
|
'email_verified_at' => now(),
|
|
'password' => 'pass',
|
|
],
|
|
);
|
|
}
|
|
|
|
$this->call(LifelineSeeder::class);
|
|
|
|
$hasPersonalAccessClient = Client::query()
|
|
->where('provider', 'users')
|
|
->where('revoked', false)
|
|
->get()
|
|
->contains(fn (Client $client): bool => $client->hasGrantType('personal_access'));
|
|
|
|
if (! $hasPersonalAccessClient) {
|
|
app(ClientRepository::class)->createPersonalAccessGrantClient(
|
|
'Thats Me Quasar Personal Access Client',
|
|
'users',
|
|
);
|
|
}
|
|
}
|
|
}
|