Prisma کے ساتھ ایک پروجیکٹ مینجمنٹ ٹول بنانا

میں Trello کی طرح ایک اشتراکی (collaborative) پروجیکٹ مینجمنٹ ٹول بنا رہا ہوں۔ میں React، Express.js، PostgreSQL، اور Socket.io کا استعمال کر رہا ہوں۔

پہلا قدم ڈیٹا بیس اسکیما (database schema) ہے۔ میں نے صارفین (users)، پروجیکٹس (projects)، بورڈز (boards)، ٹاسکس (tasks)، کمنٹس (comments)، اور نوٹیفیکیشنز (notifications) کو سنبھالنے کے لیے چھ ماڈلز ڈیزائن کیے ہیں۔

میرے Prisma اسکیما ڈیزائن سے حاصل ہونے والے اہم تکنیکی انتخاب اور اسباق درج ذیل ہیں:

• IDs کے لیے CUID کا استعمال میں تمام IDs کے لیے @default(cuid()) استعمال کرتا ہوں۔ عوامی URLs کے لیے یہ سادہ نمبروں سے بہتر ہیں۔ یہ لوگوں کو یہ اندازہ لگانے سے روکتے ہیں کہ آپ کے پاس کتنے ریکارڈز موجود ہیں۔

• واضح ریلیشن کے نام (Explicit Relation Names) جب دو فیلڈز ایک ہی ماڈل کی طرف اشارہ کرتی ہیں، تو Prisma الجھن کا شکار ہو جاتا ہے۔ مثال کے طور پر، ایک ٹاسک کا ایک تخلیق کار (creator) اور ایک تفویض کنندہ (assignee) ہوتا ہے۔ دونوں Users ہیں۔ مائیگریشن کی غلطیوں سے بچنے کے لیے مجھے @relation ناموں کا استعمال کرتے ہوئے ان ریلیشنز کو واضح طور پر نام دینا چاہیے۔

• Many-to-Many ریلیشنز کے لیے جنکشن ٹیبلز (Junction Tables) ایک صارف کئی پروجیکٹس کا حصہ ہو سکتا ہے۔ ایک پروجیکٹ میں کئی صارفین ہو سکتے ہیں۔ میں نے انہیں آپس میں جوڑنے کے لیے ایک ProjectMember ماڈل بنایا ہے۔ میں نے userId اور projectId پر ایک یونیک کنسٹرینٹ (unique constraint) لگائی ہے۔ یہ ایک ہی صارف کو دو بار ایک پروجیکٹ میں شامل ہونے سے روکتا ہے۔

• درجہ بندی اور منطق (Hierarchy and Logic) ٹاسکس پروجیکٹس میں نہیں ہوتے، بلکہ وہ بورڈز میں ہوتے ہیں۔ بورڈز پروجیکٹس میں ہوتے ہیں۔ اس سے ڈریگ اینڈ ڈراپ (drag-and-drop) آسان ہو جاتا ہے۔ کسی ٹاسک کو منتقل کرنے کے لیے، آپ کو صرف اس کی boardId اپ ڈیٹ کرنی ہوتی ہے۔

• نل ایبل ریلیشنز (Nullable Relations) کچھ ریلیشنز لازمی ہوتی ہیں، اور کچھ اختیاری۔ ایک ٹاسک کا تخلیق کار ہونا ضروری ہے، اس لیے میں سوالیہ نشان استعمال نہیں کرتا۔ تفویض کنندہ (assignee) اختیاری ہے، اس لیے میں User? اور String? استعمال کرتا ہوں۔ اسکیما کے درست کام کرنے کے لیے آپ کو دونوں شامل کرنے چاہئیں۔

عام غلطیاں جو میں نے پائیں:

آگے، میں Express بیک اینڈ بناؤں گا اور ریئل ٹائم اپ ڈیٹس کے لیے Socket.io سیٹ اپ کروں گا۔

ماخذ: https://dev.to/chinwuba_jeffrey/building-a-project-management-tool-from-scratch-starting-with-the-prisma-schema-161