# MariaDB migration 010 hotfix — v0.20.1

`chk_broadcasts_separation` error-এর জন্য এই patch। `approved_by_admin_id`-এর foreign key-তে `ON DELETE SET NULL` ছিল; একই column-এ `CHECK` থাকায় MariaDB এটি গ্রহণ করে না। MariaDB migration 010-এ শুধু ওই foreign key-র delete action `RESTRICT` করা হয়েছে। ফলে সংশ্লিষ্ট অনুমোদনকারী admin-কে সরাসরি delete করা যাবে না; একই admin নিজের broadcast অনুমোদন করতে পারবে না। Migration 021-এর approval-state check-ও এই পরিবর্তনের সুবিধা পাবে।

MariaDB-এর এই সীমাবদ্ধতা [official release notes](https://mariadb.com/docs/release-notes/enterprise-server/old-releases/10.4/10.4.31-21)-এ উল্লেখ আছে।

## Hosting-এ প্রয়োগ

1. cPanel থেকে Node application সাময়িক Stop করুন; migration চলাকালে app/cron বন্ধ রাখুন।
2. Patch ZIP-টি `/home/peglhpszdl/nodebot.monaklab.com/`-এ extract করুন, একই নামের patch files replace করুন। ZIP-এর ভেতরে সরাসরি `bin/`, `src/`, `database/`, `docs/` ইত্যাদি আছে। `.env`, `package.json` এবং `app.cjs` এতে নেই।
3. cPanel-এর দেওয়া command দিয়ে Node 24 environment activate করুন। এরপর চালান:

```bash
cd /home/peglhpszdl/nodebot.monaklab.com && \
node bin/repair-mariadb-broadcast-migration.js && \
node bin/migrate.js --dialect=mariadb && \
node bin/seed.js --dialect=mariadb && \
node bin/release-check.js
```

প্রথম command-এ `repaired` ও `repairedStatements: 5` প্রত্যাশিত। পুনরায় চালালে `already_repaired` বা migration সম্পূর্ণ হলে `already_applied` আসতে পারে। সব command সফল এবং release check-এ `passed: true` হলে application Start/Restart করুন; startup file `app.cjs` রাখুন।

Terminal-এর বদলে cPanel-এর **Run JS Script** ব্যবহার করলে `package.json`-এর বিদ্যমান `scripts` object-এ নিচের entry যোগ করুন, যথাস্থানে comma দিন:

```json
"repair:mariadb:broadcast": "node bin/repair-mariadb-broadcast-migration.js"
```

তারপর একটির সফল completion-এর পর পরেরটি চালান: `repair:mariadb:broadcast`, `migrate`, `seed`, `release:check`। `.env` এবং cPanel environment-এ `DATABASE_DIALECT=mariadb` থাকতে হবে।

## Recovery কী যাচাই করে

- নির্দিষ্ট corrected migration file-এর SHA-256 এবং completed migrations 001–009-এর history।
- Migration 010-এর প্রথম পাঁচটি statement-এর পৃথক hash, ক্রম ও direction।
- ওই পাঁচটি table আছে এবং `broadcasts` ও `broadcast_deliveries` এখনো তৈরি হয়নি।
- একই schema advisory lock ও database transaction-এর মধ্যে শুধু ওই পাঁচটি checkpoint-এর migration checksum আপডেট করে। Statement hash ও timestamp অক্ষত থাকে। Migration 010-কে আগাম completed বলে চিহ্নিত করে না।

এই repair কোনো domain table বা data delete করে না। SQL হাতে edit করা, history মুছে ফেলা বা checks নিষ্ক্রিয় করা প্রয়োজন নেই। State mismatch হলে repair থামবে; সেই error পাঠান, `.env` বা password পাঠাবেন না। একেবারে নতুন খালি database-এ repair চালানোর প্রয়োজন নেই—corrected SQL দিয়ে সরাসরি migrate/seed চালান। ইতিমধ্যে পুরোনো 010 সম্পূর্ণ recorded থাকলে এই বিশেষ recovery প্রযোজ্য নয়।

## Verification

Local `npm run check` পাস: 475 tests, 0 failures, 0 skipped; এর মধ্যে 15টি নতুন recovery regression test। MariaDB-এর original failure পুনরুৎপাদন ও recovery-এর live acceptance case যোগ করা আছে। এখানে MariaDB server পাওয়া যায়নি, তাই actual MariaDB execution এবং আপনার hosting-এ startup এখনো যাচাই বাকি।

Original MySQL migration files ও সাধারণ migration runner পরিবর্তন করা হয়নি। এই patch আলাদা MariaDB lineage-এর জন্য।
