پروجیکٹ مینجمنٹ بیک اینڈ کی تعمیر
میں CodeAlpha میں اپنی انٹرنشپ کے لیے ایک اشتراکی (collaborative) پروجیکٹ مینجمنٹ ٹول بنا رہا ہوں۔
یہ ایک سادہ Trello یا Asana کی طرح کام کرتا ہے۔ صارفین پروجیکٹس بناتے ہیں، ممبران کو مدعو کرتے ہیں، اور ٹاسکوں کو بورڈز کے درمیان منتقل کرتے ہیں۔ اسے چلانے کے لیے میں Express.js، Prisma، اور Socket.io کا استعمال کرتا ہوں۔
بیک اینڈ بناتے وقت میں نے جو تکنیکی اسباق سیکھے، وہ یہاں درج ہیں۔
ڈیٹا کے تعلقات (Relationships) کا انتظام کرنا
صارفین اور پروجیکٹس کے درمیان many-to-many تعلق ہوتا ہے۔ میں انہیں جوڑنے کے لیے ProjectMember ٹیبل کا استعمال کرتا ہوں۔ یہ ٹیبل صارف کے کردار (user role) جیسے اضافی ڈیٹا کو محفوظ کرتا ہے۔
میں نے اس ٹیبل میں ایک unique constraint شامل کیا۔ یہ اس بات کو یقینی بناتا ہے کہ ایک صارف ایک پروجیکٹ میں صرف ایک بار نظر آئے۔ یہ تیز رفتار تلاش (lookups) کے لیے ایک composite key بھی بناتا ہے۔
Kanban بورڈ کے لیے، میں نے چیزوں کو سادہ رکھا۔ ایک ٹاسک کا اسٹیٹس اس بورڈ سے طے ہوتا ہے جس سے وہ تعلق رکھتا ہے۔ کسی ٹاسک کو "To Do" سے "Done" میں منتقل کرنا محض اس کی board ID کو اپ ڈیٹ کرنے کا معاملہ ہے۔
آرکیٹیکچر کی غلطیاں
میں نے ڈیٹا بیس کنکشنز کے بارے میں ایک سخت سبق سیکھا۔ ہر route فائل میں نیا PrismaClient نہ بنائیں۔ اس سے بہت زیادہ کنکشنز بن جاتے ہیں اور آپ کی ایپ کریش ہو جاتی ہے۔
اس کے بجائے، ایک ہی فائل میں ایک مشترکہ (shared) instance بنائیں۔ اسی instance کو ہر route میں امپورٹ کریں۔ یہ آپ کے connection pool کو مستحکم رکھتا ہے۔
اتھارائزیشن اور سیکیورٹی
میں روٹس کی حفاظت کے لیے ایک protect middleware استعمال کرتا ہوں۔ یہ Authorization header میں موجود JWT کو چیک کرتا ہے۔
میں ہیڈرز پڑھتے وقت optional chaining کا استعمال کرتا ہوں۔ یہ ہیڈر کے نہ ہونے کی صورت میں ایپ کو کریش ہونے سے روکتا ہے۔
اس پروجیکٹ کے لیے، میں 7 دن کا access token استعمال کرتا ہوں۔ اگرچہ پروڈکشن ایپس میں کم وقت کے لیے رہنے والے (short-lived) ٹوکنز اور refresh tokens استعمال ہوتے ہیں، لیکن اس مخصوص دائرہ کار کے لیے ایک طویل مدتی (long-lived) ٹوکن بہتر کام کرتا ہے۔
ٹرانزیکشنز کے ذریعے ڈیٹا کی سالمیت (Data Integrity)
ایک پروجیکٹ بنانے کے لیے تین مراحل درکار ہوتے ہیں:
- پروجیکٹ کا ریکارڈ بنائیں
- مالک (owner) کو تفویض کریں
- ڈیفالٹ بورڈز بنائیں
اگر ایک مرحلہ ناکام ہو جائے تو آپ کا ڈیٹا خراب ہو سکتا ہے۔ میں ان مراحل کو wrap کرنے کے لیے prisma.$transaction استعمال کرتا ہوں۔ اگر کوئی بھی حصہ ناکام ہوتا ہے، تو پورا عمل roll back ہو جاتا ہے۔ یہ آپ کے ڈیٹا بیس کو صاف رکھتا ہے۔
عام منطقی غلطیاں
مجھے دو عام بگ (bugs) کا سامنا کرنا پڑا:
Relation Arrays: جب آپ کسی کوئری میں relations شامل کرتے ہیں، تو Prisma ایک array واپس کرتا ہے۔ آپ براہ راست relation پر کسی پراپرٹی تک رسائی حاصل نہیں کر سکتے۔ آپ کو پہلے array میں سے پہلا آئٹم منتخب کرنا ہوگا۔
روٹ کی ترتیب: Express روٹس کو اوپر سے نیچے کی طرف میچ کرتا ہے۔ اگر آپ کسی مخصوص روٹ سے پہلے پیرامیٹر والا روٹ رکھتے ہیں، تو Express غلط روٹ کو میچ کر لے گا۔ ہمیشہ پیرامیٹر والے روٹس کے اوپر مخصوص روٹس رکھیں۔
یہ بیک اینڈ پیٹرنز اب میرے ورک فلو کا حصہ ہیں۔