Prisma वापरून प्रोजेक्ट मॅनेजमेंट टूल तयार करणे
मी Trello सारखे एक कोलाबोरेटिव्ह प्रोजेक्ट मॅनेजमेंट टूल तयार करत आहे.
मी React, Express.js, PostgreSQL आणि Socket.io वापरत आहे. कोणतेही बॅकएंड रूट्स (backend routes) लिहिण्यापूर्वी, मला डेटाबेस स्कीमा (database schema) डिझाइन करावा लागेल.
स्कीमा हा पाया आहे. जर स्कीमा चुकीचा असेल, तर संपूर्ण ॲप निकामी होते. Prisma स्कीमा डिझाइनचे माझे विश्लेषण खालीलप्रमाणे आहे.
मॉडेल्स (The Models)
• User: यामध्ये नावे, ईमेल आणि पासवर्ड साठवले जातात. मी IDs साठी cuid() वापरतो. यामुळे लांब आणि युनिक (unique) स्ट्रिंग्स तयार होतात. हे नंबर्सपेक्षा चांगले आहे कारण यामुळे URL मध्ये तुमच्या युजरची संख्या उघड होत नाही.
• Project: यामध्ये प्रोजेक्टचे नाव आणि वर्णन (description) असते. मी प्रश्नचिन्हाचा (?) वापर करून वर्णन ऐच्छिक (optional) केले आहे.
• ProjectMember: हे एक जंक्शन टेबल (junction table) आहे. हे Users ला Projects शी जोडते. एक युजर अनेक प्रोजेक्ट्समध्ये सामील होऊ शकतो आणि एका प्रोजेक्टमध्ये अनेक युजर्स असू शकतात, त्यामुळे many-to-many रिलेशनशिप व्यवस्थापित करण्यासाठी तुम्हाला या मधल्या टेबलची गरज असते. एकच युजर दोनदा एकाच प्रोजेक्टमध्ये सामील होऊ नये यासाठी मी एक unique constraint जोडला आहे.
• Board: टास्क (Tasks) बोर्डच्या आत असतात. बोर्ड प्रोजेक्टच्या आत असतात. या श्रेणीबद्ध रचनेमुळे (hierarchy) ड्रॅग-अँड-ड्रॉप करणे सोपे होते. एका कॉलममधून दुसऱ्या कॉलममध्ये टास्क हलवणे म्हणजे फक्त एका फील्ड अपडेट करण्यासारखे आहे.
• Task: हे मुख्य मॉडेल आहे. याचे User मॉडेलशी दोन वेगळे संबंध (relations) आहेत:
- असाइन केलेला युजर (हा ऐच्छिक आहे).
- निर्माता (creator) (हा अनिवार्य आहे). Prisma ला कोणता संबंध कशाचा आहे हे समजण्यासाठी मला या संबंधांना स्पष्टपणे नावे द्यावी लागली.
• Comment: युजर्स टास्कवर कमेंट्स करू शकतात. कोड वाचनीय ठेवण्यासाठी मी संबंधाला "user" ऐवजी "author" असे नाव दिले आहे.
• Notification: युजर्ससाठी मेसेज ट्रॅक करण्यासाठी हे एक साधे मॉडेल आहे.
तांत्रिक अनुभव (Technical Lessons Learnt)
हे तयार करताना मला अनेक त्रुटींचा (errors) सामना करावा लागला. या गोष्टींची काळजी घ्या:
- Relation Names: जर दोन फील्ड्स एकाच मॉडेलकडे निर्देश करत असतील, तर तुम्हाला संबंधांना नावे द्यावी लागतील. तसे न केल्यास Prisma एरर देईल.
- Nullable Fields: जर एखादा संबंध ऐच्छिक (optional) असेल, तर तुम्हाला रिलेशन फील्ड आणि फॉरेन की (foreign key) फील्ड या दोन्हीवर प्रश्नचिन्ह (?) ठेवावे लागेल.
- Syntax Errors: स्ट्रिंग डिफॉल्ट्ससाठी Prisma ला डबल कोट्स (" ") आवश्यक असतात. सिंगल कोट्स (') वापरल्यास एरर येईल.
- Relation Syntax: नेहमी योग्य सिंटॅक्स वापरा:
@relation(fields: [localField], references: [remoteField]).
स्कीमा आता मायग्रेट (migrate) झाला आहे. पुढच्या टप्प्यात, मी रिअल-टाइम अपडेट्ससाठी Express बॅकएंड आणि Socket.io सेटअप तयार करेन.