לדלג לתוכן

9.7 פריזמה ובסיס נתונים תרגול

תרגול - פריזמה ובסיס נתונים - Prisma and Database

תרגיל 1 - הקמת Prisma

הקימו פרויקט Next.js עם Prisma:

  • התקינו Prisma עם SQLite
  • הגדירו סכמה עם שני מודלים: User ו-Task
  • למודל User: id, name, email (unique), createdAt
  • למודל Task: id, title, description (optional), completed (default false), priority (default "medium"), createdAt, userId (relation)
  • הריצו מיגרציה וצרו seed עם 2 משתמשים ו-5 משימות

תרגיל 2 - דף משימות עם Server Component

צרו דף שמציג את כל המשימות:

  • שלפו את המשימות עם שם המשתמש (include)
  • הציגו: כותרת, סטטוס (בוצע/לא בוצע), עדיפות, ושם המשתמש
  • הוסיפו סינון לפי סטטוס (הכל, פעיל, הושלם)
  • מיינו לפי תאריך יצירה (חדש קודם)

תרגיל 3 - CRUD מלא עם Server Actions

ממשו את כל פעולות ה-CRUD למשימות:

  • יצירה: טופס עם שדות title, description, priority
  • קריאה: דף רשימה ודף משימה בודדת
  • עדכון: אפשרות לעדכן כותרת, תיאור, עדיפות, וסטטוס
  • מחיקה: כפתור מחיקה עם אישור

כל הפעולות צריכות להיות Server Actions עם revalidatePath.


תרגיל 4 - קשרים מורכבים

הרחיבו את הסכמה:

  • הוסיפו מודל Category עם id ו-name
  • הוסיפו קשר many-to-many בין Task ל-Category
  • הוסיפו מודל Comment עם תוכן, תאריך, וקשרים ל-Task ול-User
  • צרו מיגרציה ועדכנו את ה-seed
  • הציגו קטגוריות ותגובות בדף המשימה

תרגיל 5 - חיפוש ופילטור מתקדם

צרו דף חיפוש משימות עם:

  • שדה חיפוש חופשי (חיפוש בכותרת ובתיאור)
  • סינון לפי עדיפות (נמוכה, בינונית, גבוהה)
  • סינון לפי משתמש
  • מיון (תאריך, כותרת, עדיפות)
  • פגינציה (10 משימות בעמוד)

השתמשו ב-URL search params לשמירת מצב הסינון.


תרגיל 6 - דשבורד עם סטטיסטיקות

צרו דף דשבורד שמציג:

  • מספר המשימות הכולל
  • מספר המשימות שהושלמו
  • אחוז השלמה
  • חלוקה לפי עדיפות
  • 5 המשימות האחרונות שנוצרו
  • המשתמש עם הכי הרבה משימות

השתמשו ב-Prisma aggregate ו-groupBy.


שאלות

  1. מה ההבדל בין include ל-select ב-Prisma?
  2. למה חשוב לשמור את Prisma Client ב-global בפיתוח?
  3. מה ההבדל בין prisma migrate dev ל-prisma db push?
  4. מה Cascade Delete ומתי נשתמש בו?
  5. מה היתרון של Prisma על כתיבת SQL ישירות?