Prisma के साथ एक Project Management Tool बनाना
मैं Trello की तरह एक collaborative project management tool बना रहा हूँ।
मैं React, Express.js, PostgreSQL, और Socket.io का उपयोग कर रहा हूँ। किसी भी backend route को लिखने से पहले, मुझे database schema डिज़ाइन करना होगा।
Schema ही आधार है। यदि schema गलत है, तो पूरा ऐप विफल हो जाएगा। यहाँ Prisma schema डिज़ाइन का मेरा विवरण दिया गया है।
Models
• User: यह नाम, ईमेल और पासवर्ड स्टोर करता है। मैं IDs के लिए cuid() का उपयोग करता हूँ। यह लंबी, यूनिक स्ट्रिंग्स बनाता है। यह नंबर्स की तुलना में बेहतर है क्योंकि यह URL में आपके यूजर काउंट को लीक नहीं करता है।
• Project: इसमें प्रोजेक्ट का नाम और विवरण (description) होता है। मैंने प्रश्न चिह्न (?) का उपयोग करके description को optional बना दिया है।
• ProjectMember: यह एक junction table है। यह Users को Projects से जोड़ता है। चूंकि एक यूजर कई प्रोजेक्ट्स में शामिल हो सकता है, और एक प्रोजेक्ट में कई यूजर्स हो सकते हैं, इसलिए many-to-many relationship को मैनेज करने के लिए आपको इस बीच वाली टेबल की आवश्यकता होती है। मैंने एक ही यूजर को दो बार एक ही प्रोजेक्ट में शामिल होने से रोकने के लिए एक unique constraint जोड़ा है।
• Board: Tasks, boards के अंदर होते हैं। Boards, projects के अंदर होते हैं। यह hierarchy drag-and-drop को आसान बनाती है। एक कॉलम से दूसरे कॉलम में टास्क ले जाना सिर्फ एक single field update है।
• Task: यह core model है। इसके User model के साथ दो अलग-अलग relations हैं:
- एक assigned user (यह optional है)।
- एक creator (यह required है)। मुझे इन relations को स्पष्ट रूप से नाम देना पड़ा ताकि Prisma जान सके कि कौन सा क्या है।
• Comment: यूजर्स टास्क पर कमेंट छोड़ सकते हैं। कोड को पढ़ने में आसान रखने के लिए मैंने relation का नाम "user" के बजाय "author" रखा है।
• Notification: यूजर्स के लिए मैसेज ट्रैक करने के लिए एक सरल model।
Technical Lessons Learnt
इसे बनाते समय मुझे कई त्रुटियों (errors) का सामना करना पड़ा। इनसे सावधान रहें:
- Relation Names: यदि दो fields एक ही model की ओर इशारा करते हैं, तो आपको relations को नाम देना होगा। यदि आप ऐसा नहीं करते हैं, तो Prisma एक error देगा।
- Nullable Fields: यदि कोई relation optional है, तो आपको relation field और foreign key field दोनों पर प्रश्न चिह्न (?) लगाना होगा।
- Syntax Errors: Prisma को string defaults के लिए double quotes की आवश्यकता होती है। Single quotes काम नहीं करेंगे।
- Relation Syntax: हमेशा सही syntax का उपयोग करें:
@relation(fields: [localField], references: [remoteField])।
Schema अब migrate हो चुका है। इसके बाद, मैं real-time updates के लिए Express backend और Socket.io सेटअप बनाऊँगा।