Prisma સાથે પ્રોજેક્ટ મેનેજમેન્ટ ટૂલ બનાવવું
હું Trello જેવું સહયોગી (collaborative) પ્રોજેક્ટ મેનેજમેન્ટ ટૂલ બનાવી રહ્યો છું.
હું React, Express.js, PostgreSQL, અને Socket.io નો ઉપયોગ કરી રહ્યો છું. કોઈપણ બેકએન્ડ રૂટ્સ લખતા પહેલા, મારે ડેટાબેઝ સ્કીમા ડિઝાઇન કરવો પડશે.
સ્કીમા એ પાયો છે. જો સ્કીમા ખોટો હોય, તો આખું એપ નિષ્ફળ જાય છે. અહીં Prisma સ્કીમા ડિઝાઇનનું મારું વિભાજન છે.
મોડલ્સ
• User: નામ, ઈમેલ અને પાસવર્ડ સ્ટોર કરે છે. હું ID માટે cuid() નો ઉપયોગ કરું છું. આ લાંબી, યુનિક સ્ટ્રિંગ્સ બનાવે છે. તે નંબર્સ કરતા વધુ સારું છે કારણ કે તે URL માં તમારા યુઝર કાઉન્ટને લીક કરતું નથી.
• Project: પ્રોજેક્ટનું નામ અને વર્ણન (description) ધરાવે છે. મેં પ્રશ્નચિહ્ન (?) નો ઉપયોગ કરીને વર્ણનને વૈકલ્પિક (optional) બનાવ્યું છે.
• ProjectMember: આ એક જંકશન ટેબલ (junction table) છે. તે Users ને Projects સાથે જોડે છે. એક યુઝર ઘણા પ્રોજેક્ટ્સમાં જોડાઈ શકે છે અને એક પ્રોજેક્ટમાં ઘણા યુઝર્સ હોઈ શકે છે, તેથી many-to-many રિલેશનશિપ મેનેજ કરવા માટે તમારે આ મધ્યમ ટેબલની જરૂર છે. મેં એક યુઝર એક જ પ્રોજેક્ટમાં બે વાર ન જોડાઈ શકે તે માટે યુનિક કન્સ્ટ્રેઈન્ટ (unique constraint) ઉમેરી છે.
• Board: Tasks બોર્ડની અંદર હોય છે. બોર્ડ પ્રોજેક્ટ્સની અંદર હોય છે. આ હાયરાર્કી ડ્રેગ-એન્ડ-ડ્રોપને સરળ બનાવે છે. કોલમ વચ્ચે ટાસ્ક ખસેડવો એ માત્ર એક સિંગલ ફીલ્ડ અપડેટ છે.
• 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 સેટઅપ બનાવીશ.