בניית כלי לניהול פרויקטים באמצעות Prisma

אני בונה כלי שיתופי לניהול פרויקטים בדומה ל-Trello. אני משתמש ב-React, Express.js, PostgreSQL ו-Socket.io.

השלב הראשון הוא סכימת מסד הנתונים (database schema). עיצבתי שישה מודלים לניהול משתמשים, פרויקטים, לוחות (boards), משימות, תגובות והתראות.

להלן הבחירות הטכניות העיקריות והלקחים מתכנון סכימת ה-Prisma שלי:

• שימוש ב-CUID עבור מזהים (IDs) אני משתמש ב-@default(cuid()) עבור כל ה-IDs. הם עדיפים על מספרים פשוטים עבור כתובות URL ציבוריות. הם מונעים מאנשים לנחש כמה רשומות יש לך.

• שמות קשרים (Relations) מפורשים כאשר שני שדות מצביעים לאותו מודל, Prisma עלולה להתבלבל. לדוגמה, למשימה יש יוצר (creator) ומוקצה (assignee). שניהם הם Users. אני חייב לתת שמות מפורשים לקשרים הללו באמצעות שמות @relation כדי למנוע שגיאות מיגרציה.

• טבלאות קישור (Junction Tables) עבור קשרי Many-to-Many משתמש יכול להשתייך להרבה פרויקטים. פרויקט יכול לכלול הרבה משתמשים. יצרתי מודל ProjectMember כדי לקשר ביניהם. הוספתי אילוץ ייחודי (unique constraint) על userId ו-projectId. זה מונע ממשתמש אחד להצטרף לאותו פרויקט פעמיים.

• היררכיה ולוגיקה משימות לא נמצאות בתוך פרויקטים. הן נמצאות בתוך לוחות (boards). לוחות נמצאים בתוך פרויקטים. זה הופך את ה-drag-and-drop לפשוט. כדי להזיז משימה, צריך רק לעדכן את ה-boardId שלה.

• קשרים ניתנים ל-Null (Nullable Relations) חלק מהקשרים הם חובה וחלקם אופציונליים. למשימה חייב להיות יוצר, לכן אני לא משתמש בסימן שאלה. מוקצה (assignee) הוא אופציונלי, לכן אני משתמש ב-User? וב-String?. עליך לכלול את שניהם כדי שהסכימה תעבוד.

טעויות נפוצות שמצאתי:

בשלב הבא, אבנה את ה-backend ב-Express ואגדיר את Socket.io לעדכונים בזמן אמת.

מקור: https://dev.to/chinwuba_jeffrey/building-a-project-management-tool-from-scratch-starting-with-the-prisma-schema-161