Prisma સાથે પ્રોજેક્ટ મેનેજમેન્ટ ટૂલ બનાવવું
હું Trello જેવું સહયોગી (collaborative) પ્રોજેક્ટ મેનેજમેન્ટ ટૂલ બનાવી રહ્યો છું. હું React, Express.js, PostgreSQL, અને Socket.io નો ઉપયોગ કરી રહ્યો છું.
પ્રથમ પગલું ડેટાબેઝ સ્કીમા (database schema) છે. મેં યુઝર્સ, પ્રોજેક્ટ્સ, બોર્ડ્સ, ટાસ્ક, કોમેન્ટ્સ અને નોટિફિકેશન્સને હેન્ડલ કરવા માટે છ મોડલ્સ ડિઝાઇન કર્યા છે.
મારા Prisma સ્કીમા ડિઝાઇનમાંથી મુખ્ય ટેકનિકલ પસંદગીઓ અને પાઠ અહીં છે:
• IDs માટે CUID નો ઉપયોગ કરો
હું બધા IDs માટે @default(cuid()) નો ઉપયોગ કરું છું. પબ્લિક URL માટે આ સાદા નંબરો કરતા વધુ સારા છે. તે લોકોને તમે કેટલા રેકોર્ડ્સ ધરાવો છો તેનો અંદાજ લગાવતા અટકાવે છે.
• સ્પષ્ટ રિલેશન નામો (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)
કેટલાક રિલેશન્સ જરૂરી છે, અને કેટલાક વૈકલ્પિક છે. ટાસ્કમાં ક્રિએટર હોવો જ જોઈએ, તેથી હું પ્રશ્નાર્થ ચિહ્નનો ઉપયોગ કરતો નથી. અસાઇનર વૈકલ્પિક છે, તેથી હું User? અને String? નો ઉપયોગ કરું છું. સ્કીમા કામ કરે તે માટે તમારે બંનેનો સમાવેશ કરવો આવશ્યક છે.
મેં શોધી કાઢેલી સામાન્ય ભૂલો:
- ડિફોલ્ટ્સ માટે સિંગલ ક્વોટ્સનો ઉપયોગ કરવો. Prisma ને ડબલ ક્વોટ્સની જરૂર હોય છે.
- રેફરન્સ સિન્ટેક્સમાં કોલન (colon) ભૂલી જવું.
- ભૂલથી ID ફિલ્ડ પર
@default(now())લાગુ કરવું.
હવે, હું Express બેકએન્ડ બનાવીશ અને રિયલ-ટાઇમ અપડેટ્સ માટે Socket.io સેટઅપ કરીશ.