Prismaతో ఒక ప్రాజెక్ట్ మేనేజ్మెంట్ టూల్ను నిర్మించడం
నేను Trello లాంటి ఒక కొలాబరేటివ్ ప్రాజెక్ట్ మేనేజ్మెంట్ టూల్ను నిర్మిస్తున్నాను.
నేను React, Express.js, PostgreSQL, మరియు Socket.ioలను ఉపయోగిస్తున్నాను. నేను ఏ బ్యాకెండ్ రూట్లను (backend routes) రాయకముందే, డేటాబేస్ స్కీమాను డిజైన్ చేయాలి.
స్కీమా అనేది పునాది వంటిది. స్కీమా తప్పుగా ఉంటే, మొత్తం యాప్ విఫలమవుతుంది. Prisma స్కీమా డిజైన్ యొక్క నా విశ్లేషణ ఇక్కడ ఉంది.
మోడల్స్
• User: పేర్లు, ఈమెయిల్స్ మరియు పాస్వర్డ్లను నిల్వ చేస్తుంది. నేను IDల కోసం cuid()ని ఉపయోగిస్తాను. ఇది పొడవైన, ప్రత్యేకమైన స్ట్రింగ్స్ను సృష్టిస్తుంది. ఇది నంబర్ల కంటే మెరుగైనది, ఎందుకంటే ఇది URLలో మీ యూజర్ కౌంట్ను బయటపెట్టదు.
• Project: ప్రాజెక్ట్ పేరు మరియు వివరణను కలిగి ఉంటుంది. నేను ప్రశ్న గుర్తు (?) ఉపయోగించి వివరణను ఆప్షనల్గా మార్చాను.
• ProjectMember: ఇది ఒక జంక్షన్ టేబుల్ (junction table). ఇది Usersని Projectsతో అనుసంధానిస్తుంది. ఒక యూజర్ అనేక ప్రాజెక్ట్లలో చేరవచ్చు మరియు ఒక ప్రాజెక్ట్లో అనేక మంది యూజర్లు ఉండవచ్చు, కాబట్టి ఈ many-to-many రిలేషన్షిప్ను నిర్వహించడానికి మీకు ఈ మధ్యంతర టేబుల్ అవసరం. ఒకే యూజర్ ఒక ప్రాజెక్ట్లో రెండుసార్లు చేరకుండా ఉండటానికి నేను ఒక యూనిక్ కన్స్ట్రైంట్ (unique constraint)ను జోడించాను.
• Board: టాస్క్లు బోర్డుల (boards) లోపల ఉంటాయి. బోర్డులు ప్రాజెక్ట్ల లోపల ఉంటాయి. ఈ క్రమానుగత నిర్మాణం (hierarchy) డ్రాగ్-అండ్-డ్రాప్ (drag-and-drop) ప్రక్రియను సులభతరం చేస్తుంది. కాలమ్స్ మధ్య టాస్క్ను మార్చడం అనేది కేవలం ఒక ఫీల్డ్ అప్డేట్ మాత్రమే.
• Task: ఇది ప్రధాన మోడల్. దీనికి User మోడల్తో రెండు వేర్వేరు రిలేషన్స్ ఉన్నాయి:
- అసైన్ చేయబడిన యూజర్ (ఇది ఆప్షనల్).
- క్రియేటర్ (ఇది తప్పనిసరి). Prisma ఏది ఏంటో తెలుసుకోవడానికి నేను ఈ రిలేషన్స్కు స్పష్టంగా పేర్లు పెట్టాల్సి వచ్చింది.
• Comment: యూజర్లు టాస్క్లపై కామెంట్లు చేయవచ్చు. కోడ్ చదవడానికి సులభంగా ఉండటం కోసం నేను రిలేషన్కు "user" బదులుగా "author" అని పేరు పెట్టాను.
• Notification: యూజర్ల సందేశాలను ట్రాక్ చేయడానికి ఒక సాధారణ మోడల్.
నేర్చుకున్న సాంకేతిక పాఠాలు
దీనిని నిర్మిస్తున్నప్పుడు నేను కొన్ని లోపాలను ఎదుర్కొన్నాను. వీటి పట్ల జాగ్రత్తగా ఉండండి:
- Relation Names: రెండు ఫీల్డ్లు ఒకే మోడల్ను సూచిస్తే, మీరు రిలేషన్స్కు పేర్లు పెట్టాలి. అలా చేయకపోతే, Prisma ఎర్రర్ను చూపిస్తుంది.
- Nullable Fields: ఒక రిలేషన్ ఆప్షనల్ అయితే, మీరు రిలేషన్ ఫీల్డ్ మరియు ఫారిన్ కీ (foreign key) ఫీల్డ్ రెండింటిపై ప్రశ్న గుర్తు (?) పెట్టాలి.
- Syntax Errors: స్ట్రింగ్ డిఫాల్ట్ల కోసం Prisma డబుల్ కోట్స్ (" ") అవసరం. సింగిల్ కోట్స్ (') వాడితే ఫెయిల్ అవుతుంది.
- Relation Syntax: ఎల్లప్పుడూ సరైన సింటాక్స్ను ఉపయోగించండి:
@relation(fields: [localField], references: [remoteField]).
స్కీమా ఇప్పుడు మైగ్రేట్ చేయబడింది. తదుపరి దశలో, రియల్-టైమ్ అప్డేట్ల కోసం నేను Express బ్యాకెండ్ మరియు Socket.io సెటప్ను నిర్మిస్తాను.