Demo

Module seed

Module ဇယားထဲသို့ အတန်း ထည့်ပြီး local Quan ERP dev database တွင် plugin ပေါ်လာစေပါသည်။ Development setup အတွက်သာ — UAT၊ production သို့မဟုတ် non-local host တွင် မလုပ်ရပါ။

မည်သည့်အခါ သုံးမည်

  • Local development အတွက် plugins/<name>/ အောက်တွင် plugin အသစ် မှတ်ပုံတင်ရန်
  • ERP UI မှ install မလုပ်မီ module အတန်း လိုအပ်ပါသည်
  • Local/dev အတွက် README module INSERT pattern ကို လိုက်နာရပါသည်

လိုအပ်ချက်များ

  • Local developing setup အသက်ဝင်နေရပါမည် (prepare-local-dev.sh / local core workflow)
  • psql ရရှိနိုင်ရပါမည်
  • base/backend/.env မှ credential ဖြင့် Postgres သို့ ရောက်နိုင်ရပါမည်

DB credentials

Connection တန်ဖိုးများကို base/backend/.env မှ ဖတ်ရပါသည်။ Password ကို docs၊ commit သို့မဟုတ် chat log တွင် hardcode မလုပ်ရပါ။

  • DB_HOST — local/dev အတွက် localhost / 127.0.0.1 မျှော်လင့်ရပါသည်
  • DB_PORT, DB_USERNAME, DB_PASSWORD, DB_SCHEMA
  • DB_HOST သည် local မဟုတ်ပါက ရပ်ရပါသည် — ဤ flow သည် local/dev သာ ဖြစ်ပါသည်
TSconnect
# From repo root — values from base/backend/.env export PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USERNAME" -d "$DB_SCHEMA"

Seed INSERT

အကွက်များကို plugins/<name>/module.metadata.json မှ map လုပ်ရပါသည်။ Unique constraint သည် (name, plugin_version) ဖြစ်ပါသည်။

  • name ← metadata.name (plugin folder / metadata နှင့် တူရပါမည်)
  • displayName ← လူဖတ်နိုင်သော ခေါင်းစဉ် (မရှိလျှင် မေးပါ; brand-heavy copy မဖန်တီးရပါ)
  • description ← metadata.description
  • unInstallable ← ပုံမှန် plugin များအတွက် true
  • module_entry_object ← metadata.moduleEntryObject (များသောအားဖြင့် Module)
  • plugin_version ← metadata.pluginVersion (များသောအားဖြင့် 1.0.0)
  • dependencies ← metadata.pluginDependencies ၏ JSON string (ဗလာဖြစ်လျှင် '{}')
  • base_version ← metadata.requiredBasedVersion (များသောအားဖြင့် 1.0.0)
  • version ← row/optimistic version — README seed ကဲ့သို့ 1 သုံးရပါသည်
SQLinsert
INSERT INTO module ("name","displayName","description","unInstallable","module_entry_object","plugin_version","dependencies","base_version","version") VALUES ('<name>','<Display Name>','<description>',true,'Module','1.0.0','{}','1.0.0',1);

Insert မလုပ်မီ စစ်ဆေးပါ

အတန်း ရှိပြီးသားဆိုလျှင် မထပ်မံ မထည့်ရပါ — update လိုမှသာ။ Blind re-insert ထက် targeted UPDATE ကို ဦးစားပေးရပါသည်။

SQLselect
SELECT id, name, "displayName", plugin_version, installed FROM module WHERE name = '<name>' AND plugin_version = '<plugin_version>';

One-shot နမူနာ

TSXbash
1export PGPASSWORD="$DB_PASSWORD" 2psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USERNAME" -d "$DB_SCHEMA" -v ON_ERROR_STOP=1 <<'SQL' 3INSERT INTO module 4("name","displayName","description","unInstallable","module_entry_object","plugin_version","dependencies","base_version","version") 5VALUES 6('reward-point','Reward Point','Reward point management plugin',true,'Module','1.0.0','{}','1.0.0',1); 7SQL

အကြံပြု flow

  1. 01

    Local DB အတည်ပြုခြင်း

    base/backend/.env ကို ဖတ်ပြီး DB_HOST သည် localhost / 127.0.0.1 ဖြစ်ကြောင်း စစ်ဆေးရပါသည်။

  2. 02

    Plugin ဖော်ထုတ်ခြင်း

    plugins/<name>/module.metadata.json ကို load လုပ်ရပါသည် (displayName လိုအပ်လျှင် အပါအဝင်)။

  3. 03

    ရှိ/မရှိ စစ်ဆေးခြင်း

    Insert မလုပ်မီ name + plugin_version ဖြင့် SELECT လုပ်ရပါသည်။

  4. 04

    Insert နှင့် အတည်ပြုခြင်း

    psql ဖြင့် INSERT လုပ်ပြီး SELECT ဖြင့် id / name / displayName ကို အတည်ပြုရပါသည်။

မလုပ်ရသော အရာများ

  • UAT/prod သို့မဟုတ် non-local database ကို seed မလုပ်ရပါ
  • .env၊ password သို့မဟုတ် connection dump ကို commit မလုပ်ရပါ
  • Live schema က မတောင်းဆိုလျှင် README seed ပုံစံအပြင် ကော်လံအပို မထည့်ရပါ
  • သိပြီးသား plugin name အတွက် existence check ကို ကျော်မရပါ