id(); $table->foreignId('user_id')->unique()->constrained()->cascadeOnDelete(); $table->string('plan')->default('free'); $table->string('status')->default('active'); $table->string('moneybird_contact_id')->nullable(); $table->string('moneybird_recurring_invoice_id')->nullable(); $table->date('current_period_starts_at')->nullable(); $table->date('current_period_ends_at')->nullable(); $table->date('grace_ends_at')->nullable(); $table->boolean('cancel_at_period_end')->default(false); $table->timestamps(); }); // Backfill a Free subscription for any user that already existed // before this table did, so every user always has a row. DB::table('users')->pluck('id')->each(function (int $userId) { DB::table('subscriptions')->insert([ 'user_id' => $userId, 'plan' => 'free', 'status' => 'active', 'created_at' => now(), 'updated_at' => now(), ]); }); } public function down(): void { Schema::dropIfExists('subscriptions'); } };