import { MigrationInterface, QueryRunner } from 'typeorm'; /** * فصل هوية الراكب عن السائق (قرار المالك 2026-07-20 — الخيار ب). * * قبل: القيد الفريد `(tenant_id, phone_bidx)` يعني مستخدماً واحداً لكل رقم في * كل مستأجر — فتسجيل الرقم كسائق (`setRole('driver')`) يقلب سجلّه للأبد ويكسر * وضع الراكب لنفس الرقم. بعد: الرقم الواحد يملك سجلّاً للراكب وآخر للسائق * (ومحفظتين منفصلتين تلقائياً لأنها مربوطة بـ `user_id`). * * التغيير: القيد الفريد يصبح `(tenant_id, phone_bidx, role)`. لا فقدان بيانات — * السجلات القائمة تبقى كما هي؛ الجديد فقط أنه يُسمح بسجلٍّ ثانٍ بدور مختلف. */ export class SeparateRiderDriverIdentity1721980000000 implements MigrationInterface { public async up(q: QueryRunner): Promise { await q.query(`DROP INDEX IF EXISTS "UQ_tripz_users_tenant_phone_bidx"`); await q.query(` CREATE UNIQUE INDEX IF NOT EXISTS "UQ_tripz_users_tenant_phone_bidx_role" ON tripz_users (tenant_id, phone_bidx, role) `); } public async down(q: QueryRunner): Promise { await q.query(`DROP INDEX IF EXISTS "UQ_tripz_users_tenant_phone_bidx_role"`); // العودة قد تفشل لو وُجد رقم بدورين — لا يمكن استعادة قيد أضيق مع بيانات تخالفه. await q.query(` CREATE UNIQUE INDEX IF NOT EXISTS "UQ_tripz_users_tenant_phone_bidx" ON tripz_users (tenant_id, phone_bidx) `); } }