પ્રોજેક્ટ મેનેજમેન્ટ બેકએન્ડ બનાવવું

હું CodeAlpha માં મારી ઇન્ટર્નશિપ માટે એક કોલેબોરેટિવ પ્રોજેક્ટ મેનેજમેન્ટ ટૂલ બનાવી રહ્યો છું.

તે એક સરળ Trello અથવા Asana જેવું કામ કરે છે. વપરાશકર્તાઓ પ્રોજેક્ટ્સ બનાવે છે, સભ્યોને આમંત્રિત કરે છે અને બોર્ડ્સમાં કાર્યો (tasks) ખસેડે છે. તેને ચલાવવા માટે હું Express.js, Prisma અને Socket.io નો ઉપયોગ કરું છું.

બેકએન્ડ બનાવતી વખતે મેં શીખેલા ટેકનિકલ પાઠ અહીં છે.

ડેટા રિલેશનશિપ્સનું સંચાલન

વપરાશકર્તાઓ અને પ્રોજેક્ટ્સ વચ્ચે many-to-many રિલેશનશિપ હોય છે. તેમને જોડવા માટે હું ProjectMember ટેબલનો ઉપયોગ કરું છું. આ ટેબલ યુઝર રોલ (user role) જેવો વધારાનો ડેટા સ્ટોર કરે છે.

મેં આ ટેબલમાં એક unique constraint ઉમેર્યું છે. આ સુનિશ્ચિત કરે છે કે એક પ્રોજેક્ટમાં એક વપરાશકર્તા ફક્ત એક જ વાર દેખાય. તે ઝડપી લુકઅપ માટે composite key પણ બનાવે છે.

Kanban બોર્ડ માટે, મેં વસ્તુઓને સરળ રાખી છે. ટાસ્ક સ્ટેટસ (task status) તે બોર્ડ દ્વારા નક્કી થાય છે જેનું તે છે. "To Do" થી "Done" માં ટાસ્ક ખસેડવો એ ફક્ત તેના બોર્ડ ID ને અપડેટ કરવાનો વિષય છે.

આર્કિટેક્ચરની ભૂલો

મેં ડેટાબેઝ કનેક્શન વિશે એક કઠિન પાઠ શીખ્યો. દરેક રૂટ ફાઇલમાં નવું PrismaClient બનાવશો નહીં. આનાથી ઘણા બધા કનેક્શન બને છે અને તમારું એપ ક્રેશ થઈ જાય છે.

તેના બદલે, એક જ ફાઇલમાં એક શેર કરેલ ઇન્સ્ટન્સ (shared instance) બનાવો. તે જ ઇન્સ્ટન્સને દરેક રૂટમાં ઇમ્પોર્ટ કરો. આ તમારા કનેક્શન પૂલને સ્થિર રાખે છે.

ઓથોરાઈઝેશન અને સુરક્ષા

રૂટ્સને સુરક્ષિત કરવા માટે હું protect middleware નો ઉપયોગ કરું છું. તે Authorization header માં રહેલા JWT ને તપાસે છે.

હેડર્સ વાંચતી વખતે હું optional chaining નો ઉપયોગ કરું છું. જો કોઈ હેડર ખૂટતું હોય તો આ એપને ક્રેશ થતી અટકાવે છે.

આ પ્રોજેક્ટ માટે, હું 7-દિવસીય એક્સેસ ટોકનનો ઉપયોગ કરું છું. જોકે પ્રોડક્શન એપ્સ ટૂંકા ગાળાના ટોકન્સ અને રિફ્રેશ ટોકન્સનો ઉપયોગ કરે છે, પરંતુ આ ચોક્કસ સ્કોપ માટે લાંબા ગાળાનું ટોકન સારી રીતે કામ કરે છે.

ટ્રાન્ઝેક્શન સાથે ડેટા ઇન્ટિગ્રિટી

પ્રોજેક્ટ બનાવવા માટે ત્રણ સ્ટેપ્સની જરૂર છે:

  • પ્રોજેક્ટ રેકોર્ડ બનાવો
  • માલિક (owner) સોંપો
  • ડિફોલ્ટ બોર્ડ્સ બનાવો

જો એક સ્ટેપ નિષ્ફળ જાય, તો તમારો ડેટા કરપ્ટ થઈ જાય છે. આ સ્ટેપ્સને વળતર આપવા માટે હું prisma.$transaction નો ઉપયોગ કરું છું. જો કોઈ પણ ભાગ નિષ્ફળ જાય, તો આખી પ્રક્રિયા રોલબેક (roll back) થઈ જાય છે. આ તમારા ડેટાબેઝને સ્વચ્છ રાખે છે.

સામાન્ય લોજિક ભૂલો

મને બે સામાન્ય બગ્સ (bugs) નો સામનો કરવો પડ્યો:

  1. રિલેશન એરે (Relation Arrays): જ્યારે તમે ક્વેરીમાં રિલેશન્સનો સમાવેશ કરો છો, ત્યારે Prisma એરે (array) પરત કરે છે. તમે રિલેશન પર સીધી પ્રોપર્ટી એક્સેસ કરી શકતા નથી. તમારે પહેલા એરેમાંથી પ્રથમ આઇટમ પસંદ કરવી પડશે.

  2. રૂટ ઓર્ડર: Express ઉપરથી નીચે તરફ રૂટ્સને મેચ કરે છે. જો તમે કોઈ ચોક્કસ રૂટ પહેલા પેરામીટર વાળું રૂટ મૂકો છો, તો Express ખોટા રૂટને મેચ કરશે. હંમેશા પેરામીટરાઇઝ્ડ રૂટ્સ કરતા ચોક્કસ રૂટ્સને ઉપર રાખો.

આ બેકએન્ડ પેટર્ન હવે મારા વર્કફ્લોનો ભાગ છે.

સ્ત્રોત: https://dev.to/chinwuba_jeffrey/building-the-backend-for-a-project-management-tool-express-prisma-and-the-mistakes-i-made-along-5gia