Files
BarangaySystem/database/migrations/2026_05_24_000001_create_subscriptions_tables.php
2026-06-06 18:43:00 +08:00

99 lines
4.0 KiB
PHP

<?php
declare(strict_types=1);
use Hyperf\Database\Schema\Schema;
use Hyperf\Database\Schema\Blueprint;
use Hyperf\Database\Migrations\Migration;
return new class extends Migration {
public function up(): void
{
Schema::create('subscription_plans', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('hashkey', 300)->unique();
$table->string('name')->index();
$table->string('description')->nullable();
$table->decimal('price', 15, 2)->default(0);
$table->unsignedInteger('duration_days')->default(30);
// 'restrict' | 'warn' | 'auto_deduct'
$table->string('expiry_action')->default('warn');
$table->boolean('active')->default(true)->index();
$table->json('additional_details')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->foreign('created_by')->references('id')->on('users')->nullOnDelete();
$table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();
$table->timestamps();
});
Schema::create('subscriptions', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('hashkey', 300)->unique();
$table->unsignedBigInteger('user_id')->index();
$table->unsignedBigInteger('plan_id');
$table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();
$table->foreign('plan_id')->references('id')->on('subscription_plans')->cascadeOnDelete();
// 'active' | 'expired' | 'cancelled' | 'pending'
$table->string('status')->default('pending')->index();
$table->dateTime('starts_at')->nullable();
$table->dateTime('expires_at')->nullable()->index();
// 'wallet' | 'gcash' | 'paymaya' — extensible for future gateways
$table->string('payment_method')->default('wallet');
$table->json('additional_details')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->foreign('created_by')->references('id')->on('users')->nullOnDelete();
$table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();
$table->timestamps();
});
Schema::create('subscription_invoices', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('hashkey', 300)->unique();
$table->unsignedBigInteger('subscription_id');
$table->unsignedBigInteger('user_id')->index();
$table->foreign('subscription_id')->references('id')->on('subscriptions')->cascadeOnDelete();
$table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();
$table->decimal('amount', 15, 2)->default(0);
// 'pending' | 'paid' | 'failed'
$table->string('status')->default('pending')->index();
$table->dateTime('paid_at')->nullable();
// 'wallet' | 'gcash' | 'paymaya'
$table->string('payment_method')->default('wallet');
// external gateway transaction ID, QR reference, etc.
$table->string('payment_reference')->nullable()->index();
$table->json('additional_details')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->foreign('created_by')->references('id')->on('users')->nullOnDelete();
$table->foreign('updated_by')->references('id')->on('users')->nullOnDelete();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('subscription_invoices');
Schema::dropIfExists('subscriptions');
Schema::dropIfExists('subscription_plans');
}
};