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

אני בונה כלי לניהול פרויקטים שיתופי בדומה ל-Trello.

אני משתמש ב-React, Express.js, PostgreSQL ו-Socket.io. לפני שאכתוב נתיבי backend כלשהם, אני חייב לתכנן את סכימת מסד הנתונים (database schema).

הסכימה היא הבסיס. אם הסכימה שגויה, כל האפליקציה נכשלת. להלן הפירוט שלי של תכנון סכימת Prisma.

המודלים

• User: שומר שמות, אימיילים וסיסמאות. אני משתמש ב-cuid() עבור מזהים (IDs). זה יוצר מחרוזות ארוכות וייחודיות. זה עדיף על מספרים כי זה לא חושף את מספר המשתמשים שלך ב-URL.

• Project: מחזיק את שם הפרויקט והתיאור שלו. הפכתי את התיאור לאופציונלי באמצעות סימן שאלה.

• ProjectMember: זוהי טבלת קישור (junction table). היא מחברת בין Users לבין Projects. מכיוון שמשתמש אחד יכול להצטרף להרבה פרויקטים, ופרויקט אחד כולל הרבה משתמשים, צריך את טבלת הביניים הזו כדי לנהל את יחסי ה-many-to-many. הוספתי אילוץ ייחודי (unique constraint) כדי למנוע ממשתמש אחד להצטרף לאותו פרויקט פעמיים.

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

• Task: זהו מודל הליבה. יש לו שני קשרים (relations) שונים למודל ה-User:

• Comment: משתמשים יכולים להשאיר תגובות על משימות. קראתי לקשר "author" במקום "user" כדי לשמור על קוד קריא.

• Notification: מודל פשוט למעקב אחר הודעות עבור משתמשים.

לקחים טכניים שנלמדו

נתקלתי בכמה שגיאות בזמן הבנייה. היזהרו מהבאים:

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

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

בניית אפליקציית תוכנה היא כמו בניית בית. עליך לבנות תשתית איתנה לפני שתוכל להתחיל להוסיף קירות וגג. בעולם פיתוח התוכנה, התשתית הזו היא סכמת מסד הנתונים שלך.

במאמר זה, נתחיל את המסע שלנו בבניית כלי לניהול פרויקטים על ידי עיצוב הסכמה באמצעות Prisma.

למה Prisma?

Prisma הוא ORM (Object-Relational Mapper) מהדור הבא, המקל על האינטראקציה עם מסד הנתונים שלך באמצעות API אינטואיטיבי ובעל Type-safety. הוא מספק הגנה על סוגי הנתונים (Type-safety), מה שמפחית שגיאות בזמן ריצה, ומציע חוויית פיתוח חלקה.

עיצוב הסכמה

הצעד הראשון בבניית כל אפליקציה הוא הבנת מבנה הנתונים. עלינו להגדיר את הישויות המרכזיות שלנו ואת הקשרים ביניהן.

להלן סכמת ה-Prisma הבסיסית שלנו:

// This is your Prisma schema file

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int       @id @default(autoincrement())
  email     String    @unique
  name      String?
  projects  Project[]
  tasks     Task[]
  comments  Comment[]
  createdAt DateTime  @default(now())
  updatedAt DateTime  @updatedAt
}

model Project {
  id          Int