createIfNotExists('job_progress', function ($table) { // Primary key $table->string('id', 26)->primary(); // Job reference $table->string('job_id', 26)->index(); // Progress tracking $table->decimal('percentage', 5, 2)->index(); // 0.00 to 100.00 $table->text('message'); $table->string('step_name', 100)->nullable()->index(); // Additional data $table->json('metadata')->nullable(); // Status flags $table->boolean('is_completed')->default(false)->index(); $table->boolean('is_failed')->default(false)->index(); // Timestamp $table->timestamp('updated_at')->index(); // Composite indexes for efficient querying $table->index(['job_id', 'updated_at']); $table->index(['job_id', 'is_completed']); $table->index(['is_completed', 'updated_at']); $table->index(['percentage', 'updated_at']); }); $schema->execute(); } public function down(ConnectionInterface $connection): void { $schema = new Schema($connection); $schema->dropIfExists('job_progress'); $schema->execute(); } public function getVersion(): MigrationVersion { return MigrationVersion::fromTimestamp("2024_12_31_140003"); } public function getDescription(): string { return "Create Job Progress Table"; } public function getDomain(): string { return "Framework"; } }