id(); $table->uuid('uuid')->unique(); $table->string('type'); // sms, email, archive, segment $table->string('status')->default('draft'); // draft, queued, running, completed, failed, canceled $table->string('name')->nullable(); $table->text('description')->nullable(); $table->json('meta')->nullable(); $table->unsignedInteger('total_items')->default(0); $table->unsignedInteger('processing_count')->default(0); $table->unsignedInteger('sent_count')->default(0); $table->unsignedInteger('failed_count')->default(0); $table->foreignId('created_by')->nullable()->constrained('users')->nullOnDelete(); $table->timestamp('finished_at')->nullable(); $table->timestamps(); $table->index(['type', 'status']); $table->index(['created_by']); $table->index(['finished_at']); }); } public function down(): void { Schema::dropIfExists('packages'); } };