use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('media', function (Blueprint $table) { $table->uuid('id')->primary(); $table->uuid('user_id'); // Who uploaded it $table->uuid('mediable_id')->nullable(); // The parent (Post, Profile, etc.) $table->string('mediable_type')->nullable(); $table->string('disk')->default('r2'); $table->string('file_path'); $table->string('original_name'); $table->string('mime_type'); $table->unsignedBigInteger('size'); // in bytes $table->json('conversions')->nullable(); // Thumbnails, HLS playlists, etc. $table->string('status')->default('processing'); // processing, completed, failed $table->integer('order')->default(0); $table->json('meta')->nullable(); // Width, height, duration, etc. $table->timestamps(); $table->index(['mediable_id', 'mediable_type']); $table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete(); }); } public function down(): void { Schema::dropIfExists('media'); } };