منصوبے کے بارے میں

جائزہ یہ ریپوزٹری، sqlite-multi-tenant، .NET کے لیے ایک multi-tenant SQLite ڈیٹا بیس مینیجر ہے (جسے ریپوزٹری میٹا ڈیٹا میں فی ٹیننٹ آئسولیشن، مائیگریشنز اور بیک اپس فراہم کرنے والے کے طور پر بیان کیا گیا ہے)۔ README ایک کلاس-بائی-کلاس حوالہ ہے: ہر سیکشن ایک سروس، ہیلپر یا ویلیڈیٹر کی دستاویزات فراہم کرتا ہے اور اسے C# کے استعمال کی مثالوں سے واضح کرتا ہے۔ اسے ایک 'گائیڈ' کے بجائے API دستاویزات کے طور پر لکھا گیا ہے، لہذا نیچے دیا گیا مواد وہی ہے جو README اصل میں ظاہر کرتا ہے۔ ملٹی-ٹیننسی حکمت عملی README کے اینڈ-ٹو-اینڈ آئسولیشن ٹیسٹ دو معاون طریقوں کی وضاحت کرتے ہیں: - Connection-per-tenant: ہر ٹیننٹ کی پشت پر اس کی اپنی جسمانی SQLite فائل ہوتی ہے، جو فائل لیول کی آئسولیشن فراہم کرتی ہے۔ ٹیننٹ کی کنکشن سٹرنگ صرف اسی ٹیننٹ کے ڈیٹا بیس کی طرف اشارہ کرتی ہے۔ - Shared-schema: تمام ٹیننٹس ایک ہی SQLite فائل استعمال کرتے ہیں، اور ایک TenantId ڈسکریمنٹر کالم ہر کوئری کو اسکوپ کرتا ہے تاکہ ہر ٹیننٹ صرف اپنی rows کو پڑھے یا لکھے۔ آئسولیشن ٹیسٹ جان بوجھ کر سخت چیکس کے طور پر پیش کیے گئے ہیں کہ کوئی ٹیننٹ کسی دوسرے ٹیننٹ کی rows کو نہ پڑھ سکے، اپ ڈیٹ نہ کر سکے یا حذف نہ کر سکے۔ نمونہ ٹیسٹ کوڈ فی ٹیننٹ عارضی ڈیٹا بیس فائلیں بناتا ہے، ٹیننٹ-ٹیگ شدہ دستاویزات شامل کرتا ہے، اور اس بات کی تصدیق کرتا ہے کہ TenantId فلٹر کے ساتھ کوئری کرنے سے صرف اس ٹیننٹ کے ٹائٹلز واپس ملتے ہیں۔ یہی پیٹرن ایک مشترکہ فائل کے لیے دکھایا گیا ہے جس میں کئی ٹیننٹس کی rows ہوتی ہیں۔ نمونوں میں ہیلپر میتھڈز کنکشن سٹرنگز بناتے ہیں، Id، TenantId اور Title کالمز کے ساتھ Documents ٹیبل بناتے ہیں، پیرامیٹرائزڈ کمانڈز کے ساتھ rows شامل کرتے ہیں، اور ٹیننٹ کے مطابق فلٹر شدہ ٹائٹلز پڑھتے ہیں۔ انٹیگریٹی چیکنگ IntegrityCheckService ٹیننٹ ڈیٹا بیسز میں SQLite PRAGMA integrity_check آپریشنز انجام دیتا ہے۔ دستاویزی انٹری پوائنٹس: - آئی ڈی کے ذریعے ایک واحد ٹیننٹ کو چیک کریں۔ - ٹیننٹس کی ایک واضح فہرست کو چیک کریں، جس میں maxDegreeOfParallelism کا آرگیومنٹ شامل ہو۔ - سسٹم میں تمام ٹیننٹس کو چیک کریں، جس میں بھی متغیر پیراللزم (parallelism) موجود ہے۔ - صرف فعال (active) ٹیننٹس کو چیک کریں۔ نتائج TenantIntegrityCheckResult آبجیکٹس کے طور پر سامنے آتے ہیں جو کم از کم TenantId اور IsOk کو ظاہر کرتے ہیں۔ کنفیگور ایبل پیراللزم کو ویلیڈیشن کے دوران سسٹم لوڈ کو مینیج کرنے کے طریقے کے طور پر پیش کیا گیا ہے۔ ٹیننٹ کانٹیکسٹ ہیلپرز TenantContextHelperExtensions ملٹی-ٹیننٹ اسکوپس کے اندر کام کرنے کے لیے TenantContextHelper میں ایکسٹینشن میتھڈز شامل کرتا ہے۔ README دکھاتا ہے: یہ چیک کرنا کہ آیا موجودہ ٹیننٹ ایک ٹارگٹ آئی ڈی سے میچ کرتا ہے، ایک ویلیڈیٹڈ اسکوپ بنانا جو ٹیننٹ آئی ڈی اور صارف آئی ڈی لے جا سکے اور اسے using بلاک میں استعمال کیا جائے، مطلوبہ ٹیننٹ کانٹیکسٹ حاصل کرنا، براہ راست مطلوبہ ٹیننٹ آئی ڈی حاصل کرنا، اور ایک مخصوص ٹیننٹ کانٹیکسٹ کے اندر ایک ایکشن یا ویلیو واپس کرنے والے فنکشن کو چلانا۔ ان کا مقصد ٹیننٹ کے بارے میں آگاہ کوڈ راستوں کے گرد تکراری کام کو کم کرنا ہے۔ مڈل ویئر ویلیڈیشن دو ویلیڈیٹرز کی دستاویزات موجود ہیں: - RateLimitingMiddlewareValidation ایک RateLimitingMiddleware انسٹینس، ایک RateLimitingConfig آبجیکٹ (جس میں MaxRequestsPerSecond، MaxBurst، WindowSize، Enabled اور BanDuration جیسے فیلڈز ہیں)، ایک RateLimitExceededResult (IsExceeded، RetryAfter، CurrentRequestCount، Limit، Window)، اور RateLimitStatistics (TotalRequests، AllowedRequests، DeniedRequests، PeakRequestsPerSecond، CurrentActiveLimits) کی تصدیق کرتا ہے۔ ہر اوور لوڈ کے لیے README دکھاتا ہے کہ Validate مسائل کی سٹرنگز کی فہرست واپس کرتا ہے، IsValid ایک بولین واپس کرتا ہے، اور EnsureValid ان پٹ غلط ہونے پر ایرر (throw) دیتا ہے۔ ایک ورک فلو مثال استعمال سے پہلے مڈل ویئر کنفیگریشن کی تصدیق کرتی ہے اور نتیجے میں آنے والے آرگیومنٹ ایکسیپشن کو پکڑتی ہے۔ - ErrorHandlingMiddlewareValidation ایکسٹینشن میتھڈز فراہم کرتا ہے جو ErrorHandlingMiddleware انسٹینس اور Result آبجیکٹس کی تصدیق کرتے ہیں۔ یہ نل ریفرنسز، کامیابی کے جھنڈوں اور ایرر میسجز کے درمیان ہم آہنگی، اور اس بات کی چیک کرتا ہے کہ کامیاب نتائج ایک غیر ڈیفالٹ ویلیو لے کر چلیں۔ دستاویزی سطح مڈل ویئر پر Validate، IsValid اور EnsureValid ہے، اور Result ویلیوز پر بھی یہی تین میتھڈز ہیں، تاکہ ریکویسٹ پائپ لائن میں شروع میں ہی انویریئنٹ (invariants) کو نافذ کیا جا سکے۔ سیٹنگز تک رسائی SettingsControllerExtensions سیٹنگز کنٹرولر میں اسٹرونگلی ٹائپڈ اور بیچ آپریشنز شامل کرتا ہے۔ دستاویزی میتھڈز میں شامل ہیں: ایک سیٹنگ کو ٹھوس ٹائپ کے طور پر پڑھنا، اختیاری طور پر ایک کسٹم پارس فنکشن کے ساتھ (مثلاً DateTime کے لیے)؛ ایک اسٹرونگلی ٹائپڈ ویلیو لکھنا؛ ایک ہی بیچ کال میں سیٹنگز کی ڈکشنری کو اپ ڈیٹ کرنا؛ یہ ٹیسٹ کرنا کہ آیا کوئی سیٹنگ موجود ہے؛ اور ایک پریڈیکیٹ کے ذریعے فلٹر شدہ سیٹنگز حاصل کرنا، جو سیٹنگ ویلیوز کی فہرست واپس کرتا ہے۔ نتائج کو ایک API ریسپانس آبجیکٹ میں لپیٹا جاتا ہے جس میں Data پے لوڈ ہوتا ہے، جیسا کہ مثالوں میں OkObjectResult چیکس سے ظاہر ہوتا ہے۔ سیریلائزیشن یوٹیلیٹیز - ReportGeneratorJsonExtensions مانیٹرنگ ڈیٹا کے لیے System.Text.Json سیریلائزیشن کو لپیٹتا ہے: ہیلتھ سمریز، آپریشن سٹیٹسٹکس اور پرفارمنس میٹرکس۔ یہ لکھنے کے لیے ToJson، سٹیٹسٹکس پڑھنے کے لیے FromJsonToOperationStatistics، اور بولین کامیابی کے نتیجے کے ساتھ پرفارمنس میٹرکس کے لیے TryFromJson کی دستاویزات فراہم کرتا ہے۔ - StringUtilitiesJsonExtensions سٹرنگز کو سیریلائز اور ڈی سیریلائز کرتا ہے، جس میں ایسے ورژن ہیں جو SHA256 ہیش منسلک کرتے ہیں یا snake_case میں تبدیل کرتے ہیں، پلس ایک ٹرائی-ڈی سیریلائز میتھڈ جو بغیر تھرو کیے کامیابی کی اطلاع دیتا ہے۔ ٹیسٹنگ یوٹیلیٹیز TenantNameValidatorTestsExtensions ٹیننٹ نام کی تصدیق کے لیے اسرشن اسٹائل ہیلپرز فراہم کرتا ہے: یہ تصدیق کرنا کہ ایک نام متوقع نارملائزڈ ٹیننٹ آئی ڈی سے میچ کرتا ہے، کہ ایک نام کو درست ٹیننٹ آئی ڈی سمجھا جاتا ہے، کہ ایک غلط نام ایک مخصوص متوقع ایرر میسج پیدا کرتا ہے، اور غلط ٹیننٹ آئی ڈیز کے بلٹ ان کلیکشنز کو ان کے ایررز اور درست نام-ٹو-آئی ڈی میپنگ کے ساتھ شمار کرنا۔ یہ ٹیسٹ سوئیٹس سے دوبارہ استعمال کے لیے بنائے گئے ہیں۔ جائزے کے لیے نوٹس README انفرادی APIs کی دستاویزات ہے جس میں استعمال کے نمونے ہیں؛ اس میں انسٹالیشن ہدایات، پیکیج نام، سپورٹڈ .NET ورژنز، مائیگریشن یا بیک اپ گائیڈز، یا لائسنس اور کنٹری بیوشن کی تفصیلات شامل نہیں ہیں، حالانکہ ریپوزٹری کی تفصیل میں مائیگریشنز اور بیک اپس کا ذکر ہے۔ نمونے SqliteMultiTenant.Services، SqliteMultiTenant.Models، SqliteMultiTenant.Utilities، SqliteMultiTenant.Middleware، SqliteMultiTenant.Monitoring، SqliteMultiTenant.Validation اور SqliteMultiTenant.Api.Controllers جیسے نیم اسپیسز کا حوالہ دیتے ہیں، اور وہ System.Data.SQLite اور ایک ٹیسٹ فریم ورک پر منحصر ہیں۔ قارئین کو نمونوں کو محض وضاحتی سمجھنا چاہیے اور انہیں اپنانے سے پہلے سورس کوڈ کے ذریعے موجودہ APIs، پیکیجنگ اور آئسولیشن ضمانتوں کی تصدیق کرنی چاہیے۔ README کے آخر میں دہرائے گئے بلاکس دستاویز میں کچھ تکرار کی نشاندہی کرتے ہیں۔