ایک کوڈ بیس سے متعدد ایپس کیسے بنائیں؟
6 منٹ پڑھنے کا وقتMohammad Shaker

ایک کوڈ بیس سے متعدد ایپس کیسے بنائیں؟

Alphazed نے ایک ہی بیک اینڈ کوڈ بیس اور Flutter فریم ورک سے 7 سے زائد تعلیمی ایپس چلائی ہیں۔ ہر ایپ کی اپنی ڈیٹا ٹیبلز اور مواد ہے۔

Engineering

فوری جواب

Alphazed نے ایک ہی بیک اینڈ کوڈ بیس اور Flutter فریم ورک سے 7 سے زائد تعلیمی ایپس چلائی ہیں۔ ہر ایپ کی اپنی ڈیٹا ٹیبلز اور مواد ہے۔

ہم نے ایک کوڈ بیس سے متعدد ایپس کا پلیٹ فارم کیسے بنایا

Alphazed 7 سے زائد تعلیمی ایپس (Amal, Thurayya, Qais, KidElite, Alphazed School, Alphazed Montessori، اور مزید) ایک ہی بیک اینڈ کوڈ بیس اور مشترکہ Flutter موبائل فریم ورک سے چلاتا ہے۔ ہر ایپ کو اپنی ڈیٹا بیس ٹیبلز (پریفکس کے ساتھ)، کنفیگریشن، پش نوٹیفیکیشنز، ای میل ٹیمپلیٹس، اور مواد ملتا ہے — مگر وہ توثیق (AWS Cognito)، تجزیاتی نظام، اور بنیادی تعلیمی الگوردمز کو مشترکہ طور پر استعمال کرتے ہیں۔

بیک اینڈ: رن ٹائم ایپ سلیکشن

یہ کیسے کام کرتا ہے

ڈپلائمنٹ کے وقت ایک ماحول کی ویری ایبل ایپ کا انتخاب کرتی ہے:

# Amal ڈپلائے کریں
export APP_NAME=amal
serverless deploy

# Thurayya ڈپلائے کریں
export APP_NAME=thurayya
serverless deploy

# Qais ڈپلائے کریں
export APP_NAME=qais
serverless deploy

ہر ڈپلائمنٹ الگ Lambda فنکشنز، API گیٹ وے راؤٹس، اور مانیٹرنگ بناتی ہے — مگر سب ایک ہی بیک اینڈ کوڈ بیس سے جڑتی ہیں۔

تین سطحی کنفیگریشن کی ترجیح

# src/config.py
import os

app_name = os.getenv('APP_NAME', 'amal')

# پہلی سطح: عین ایپ میچ
config = load_json(f'config/{app_name}.json')

# دوسری سطح: ایپ فیملی میچ (اگر عین کنفیگریشن موجود نہ ہو)
if not config:
    family = app_name.split('_')[0]  # 'amal_beta' → 'amal'
    config = load_json(f'config/{family}.json')

# تیسری سطح: ڈیفالٹ
if not config:
    config = load_json('config/default.json')

ہر ایپ کی کنفیگریشن (config/amal.json)

{
  "app_name": "amal",
  "app_id": "com.alphazed.amal",
  "database": {
    "table_prefix": "amal_"
  },
  "email": {
    "template_dir": "templates/amal",
    "from_address": "amal@alphazed.com",
    "from_name": "Amal Team"
  },
  "push_notifications": {
    "firebase_project": "alphazed-amal",
    "apns_certificate": "certs/amal.pem"
  },
  "content": {
    "s3_bucket": "amal-content-production",
    "curriculum_id": "amal_v3_arabic"
  },
  "feature_flags": {
    "enable_tajweed_feedback": false,
    "enable_noorani_qaida": false,
    "enable_juz_amma": false,
    "enable_creature_building": true,
    "enable_physics_games": true
  },
  "pricing": {
    "monthly_usd": 6.99,
    "yearly_usd": 67.99,
    "trial_days": 14
  }
}

مشترک بمقابلہ ہر ایپ کے وسائل

وسیلہمشترکہر ایپوجہ
Lambda کوڈ✓ ہاں✗ نہیںایک کوڈ بیس، APP_NAME کے مطابق برانچنگ
RDS انسٹینس✓ ہاں✗ نہیں (ٹیبلز پریفکس کے ساتھ)لاگت کم، واحد بیک اپ
S3 مواد✗ نہیں✓ ہاںہر ایپ کا اپنا نصاب
AWS Cognito✓ ہاں✗ نہیں (app_id کے ذریعہ)مرکزی توثیق، app_id سے فرق
تجزیاتی لیک✓ ہاں✗ نہیں (ایپ کے مطابق تقسیم)یکجا پائپ لائن، جدا شدہ ڈیٹا
Firebase میسجنگ✗ نہیں✓ ہاںایپ مخصوص APNs + FCM

فرنٹ اینڈ: Flutter کی ملٹی ایپ آرکیٹیکچر

مشترکہ کور (packages/alphazed_common)

  • اسٹیٹ مینجمنٹ (Riverpod)
  • آڈیو ہینڈلنگ
  • اینیمیشن لائبریری (Rive انٹیگریشن)
  • ڈیزائن سسٹم (رنگ، طرز تحریر، وجیٹس)
  • توثیقی فلو
  • تجزیاتی کلائنٹ

ایپ مخصوص تہہ (apps/amal, apps/thurayya وغیرہ)

apps/
  ├── amal/
  │   ├── lib/
  │   │   ├── main.dart (ایپ کا داخلہ نقطہ)
  │   │   ├── config/
  │   │   │   ├── curriculum.json (Amal کے اسباق کی ساخت)
  │   │   │   ├── colors.dart (Amal کا تھیم)
  │   │   │   └── characters.json (اووٹار تخصیص)
  │   │   └── screens/ (Amal مخصوص سکرینز)
  │   └── pubspec.yaml (Amal کی انحصار)
  │
  ├── thurayya/
  │   ├── lib/
  │   │   ├── main.dart (مختلف داخلہ نقطہ)
  │   │   ├── config/
  │   │   │   ├── curriculum.json (Juz Amma کی ساخت)
  │   │   │   ├── colors.dart (Thurayya کا تھیم)
  │   │   │   └── characters.json (اووٹار تخصیص)
  │   │   └── screens/ (Thurayya مخصوص سکرینز)
  │   └── pubspec.yaml (Thurayya کی انحصار)
  │
  └── packages/
      └── alphazed_common/ (مشترکہ کوڈ)

بِلڈ ٹائم کنفیگریشن

# Amal بلڈ کریں
flutter build apk --dart-define=APP_NAME=amal --dart-define=CURRICULUM=amal_v3

# Thurayya بلڈ کریں
flutter build apk --dart-define=APP_NAME=thurayya --dart-define=CURRICULUM=thurayya_juzamma

بِلڈ کے دوران، ہر ایپ کو اپنا نصاب ڈیٹا، رنگ، اور کنفیگریشن شامل کیا جاتا ہے۔ ایک کوڈ ریپوزیٹری مگر متعدد مرتب شدہ بائنریز۔

ڈپلائمنٹ: آزاد اسٹیکس

سرور لیس فریم ورک کنفیگریشن

# serverless.yml
service: alphazed-backend

custom:
  pythonRequirements:
    dockerizePip: true
  app_name: ${env:APP_NAME}

functions:
  # یہ فنکشنز ہر APP_NAME کے لیے ڈپلائے ہوتے ہیں
  get_user:
    handler: src/handlers/user.get_user
    events:
      - http:
          path: app/{app_name}/user/{user_id}
          method: get
  
  content_duo:
    handler: src/handlers/content.generate_content_duo
    timeout: 20
    events:
      - http:
          path: app/{app_name}/content_duo
          method: post

resources:
  Resources:
    # ہر ایپ کو الگ CloudWatch لاگ گروپ ملتا ہے
    ${self:custom.app_name}LogGroup:
      Type: AWS::Logs::LogGroup
      Properties:
        LogGroupName: /aws/lambda/alphazed-${self:custom.app_name}
        RetentionInDays: 30

جب آپ APP_NAME=amal کے ساتھ ڈپلائے کرتے ہیں، تو CloudFormation بناتا ہے:

  • Lambda فنکشنز جو alphazed-amal-* کے تحت شروع ہوتے ہیں
  • API گیٹ وے راؤٹس جو /amal/* کے تحت ہوتے ہیں
  • CloudWatch لاگز جو /aws/lambda/alphazed-amal کے تحت ہوتے ہیں
  • آزاد اسکیلنگ اور مانیٹرنگ

یہ کیوں اہم ہے

پروڈکٹ ٹیموں کے لیے

  • نئی ایپ لانچ: مہینوں کی بجائے ہفتوں میں (مشترکہ انفراسٹرکچر)
  • فیچر برابر: بگ فکسز اور الگوردم اپڈیٹس سب ایپس پر فوراً اثر انداز ہوتے ہیں
  • A/B ٹیسٹنگ: کسی ایک ایپ پر فیچرز آزمایں پھر باقیوں پر لاگو کریں

انجینئرنگ کے لیے

  • ایک کوڈ بیس: ایک ٹیسٹ سیٹ، ایک CI/CD پائپ لائن
  • مشترکہ تعلیمی الگوردمز: spaced repetition اور مواد کا امتزاج تمام ایپس کو فائدہ پہنچاتے ہیں
  • عملیاتی کارکردگی: ایک ٹیم پورے انفراسٹرکچر کا انتظام کرتی ہے

لاگت کے لیے

  • مشترکہ RDS: 7 الگ الگ ڈیٹابیس کی جگہ کم لاگت
  • مشترکہ Cognito: ایک توثیقی فراہم کنندہ سب ایپس کے لیے
  • مشترکہ تجزیات: ایک پائپ لائن جو 7 ایپس کو خدمات دیتی ہے
  • تخمینی لاگت کی بچت: سالانہ $40,000-60,000 بالخصوص الگ الگ بیک اینڈ کے مقابلے میں

چیلنجز اور حل

چیلنج 1: ڈیٹابیس اسکیمہ کے تصادم

  • Amal کو amal_user_memory ٹیبل چاہیے
  • Thurayya کو thurayya_user_memory ٹیبل چاہیے (قرآن حفظ کے مختلف فیلڈز)
  • حل: مائیگریشنز ایپ کے مطابق چلتی ہیں۔ migrations/001_amal_user_memory.sql صرف APP_NAME=amal کے وقت رن ہوتا ہے

چیلنج 2: مختلف فیچر سیٹس

  • Thurayya میں تجوید فیڈبیک ہے، Amal میں نہیں
  • Amal میں فزکس گیمز ہیں، Thurayya میں نہیں
  • حل: کنفیگریشن میں فیچر فلیگز (enable_tajweed_feedback, enable_physics_games)

چیلنج 3: آزاد اسکیلنگ

  • Amal کو ٹریفک زیادہ ملا، Thurayya کم
  • مشترکہ Lambda پول مطلب وہ مقابلہ کرتے ہیں
  • حل: CloudWatch اسکیلنگ پالیسیز ہر ایپ کے لیے۔ جیسے amal-* Lambdas کنکرنسی کی حد تک پہنچیں، خودکار اسکیلنگ

اکثر پوچھے گئے سوالات

س: کیا ایک کوڈ بیس شیئر کرنے سے ایپس کے بیچ جوڑ بڑھتا ہے؟
ج: نہیں۔ ہر ایپ کا کوڈ الگ فولڈرز میں ہے (apps/amal, apps/thurayya)۔ مشترکہ کوڈ packages/alphazed_common میں ہے اور واضح طور پر ورزن کنٹرول ہوتا ہے۔ زیادہ جوڑ ایک کوڈ ریویو میں پکڑا جاتا ہے۔

س: اگر کسی ایپ کو API میں اہم تبدیلی کرنی ہو؟
ج: ہم APIs کو ایپ کے مطابق ورزن کرتے ہیں: /amal/v1/*, /thurayya/v1/*۔ ایپس آزادانہ اپگریڈ کر سکتی ہیں۔ پرانے ورژن 12 مہینے چلتے ہیں تاکہ اپ ڈیٹ کا وقت ملے۔

س: کیا ایپس صارفین کو شیئر کر سکتی ہیں؟
ج: بذات خود نہیں۔ ہر ایپ کی اپنی صارف ٹیبل (پریفکس کے ساتھ) ہوتی ہے۔ اگر والدین دونوں Amal اور Thurayya سبسکرائب کرنا چاہیں تو الگ اکاؤنٹس بناتے ہیں (یا بعد میں 'خاندان' لنک کرنے کی سہولت دی جا سکتی ہے)۔

شیئر کریںTwitterLinkedInWhatsApp

متعلقہ مضامین