kithkin/database/migrations/2025_07_15_000000_create_sabre_schema.php

66 lines
1.6 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/** Path helper */
private function sql(string $file): string
{
return base_path("vendor/sabre/dav/examples/sql/{$file}");
}
private function prefix(): string
{
$driver = DB::connection()->getDriverName();
return match ($driver) {
'sqlite' => 'sqlite',
'pgsql' => 'pgsql',
default => 'mysql',
};
}
public function up(): void
{
$prefix = $this->prefix();
Schema::disableForeignKeyConstraints();
// Principals (users & groups)
DB::unprepared(File::get($this->sql("{$prefix}.principals.sql")));
// CalDAV calendars + objects
DB::unprepared(File::get($this->sql("{$prefix}.calendars.sql")));
// CardDAV address books + cards
DB::unprepared(File::get($this->sql("{$prefix}.addressbooks.sql")));
Schema::enableForeignKeyConstraints();
}
public function down(): void
{
$this->prefix();
Schema::disableForeignKeyConstraints();
// Drop in reverse dependency order
DB::statement('DROP TABLE IF EXISTS
cards_changes,
addressbooks_changes,
cards,
addressbooks,
schedulingobjects,
calendarchanges,
calendarobjects,
calendarinstances,
calendars,
groupmembers
');
Schema::enableForeignKeyConstraints();
}
};