2025_10_18_135607_create_email_messages.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. use Illuminate\Database\Migrations\Migration;
  3. use Illuminate\Database\Schema\Blueprint;
  4. use Illuminate\Support\Facades\Schema;
  5. use App\Database\Migrations\TenantMigration;
  6. return new class extends TenantMigration
  7. {
  8. public function up()
  9. {
  10. Schema::create('email_messages', function (Blueprint $t) {
  11. $t->id();
  12. $t->string('subject');
  13. $t->longText('content_html');
  14. $t->enum('status', ['draft', 'scheduled', 'processing', 'sent', 'failed', 'canceled'])->default('draft')->index();
  15. $t->dateTime('schedule_at')->nullable()->index();
  16. $t->dateTime('sent_at')->nullable();
  17. $t->foreignId('created_by')->constrained('users')->cascadeOnDelete();
  18. $t->timestamps();
  19. });
  20. Schema::create('email_message_recipients', function (Blueprint $t) {
  21. $t->id();
  22. $t->foreignId('email_message_id')->constrained('email_messages')->cascadeOnDelete();
  23. $t->foreignId('member_id')->nullable()->constrained('members')->nullOnDelete();
  24. $t->string('email_address');
  25. $t->enum('status', ['pending', 'sent', 'failed', 'bounced', 'skipped'])->default('pending')->index();
  26. $t->text('error_message')->nullable();
  27. $t->dateTime('sent_at')->nullable();
  28. $t->timestamps();
  29. $t->index(['email_message_id', 'status']);
  30. });
  31. Schema::create('email_message_attachments', function (Blueprint $t) {
  32. $t->id();
  33. $t->foreignId('email_message_id')->constrained('email_messages')->cascadeOnDelete();
  34. $t->string('disk')->default('public');
  35. $t->string('path');
  36. $t->string('name');
  37. $t->unsignedBigInteger('size')->nullable();
  38. $t->timestamps();
  39. });
  40. }
  41. public function down()
  42. {
  43. Schema::dropIfExists('email_message_attachments');
  44. Schema::dropIfExists('email_message_recipients');
  45. Schema::dropIfExists('email_messages');
  46. }
  47. };