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.
שאלות¶
- מה ההבדל בין
includeל-selectב-Prisma? - למה חשוב לשמור את Prisma Client ב-global בפיתוח?
- מה ההבדל בין
prisma migrate devל-prisma db push? - מה Cascade Delete ומתי נשתמש בו?
- מה היתרון של Prisma על כתיבת SQL ישירות?