# مشخصات درس‌نامه: اتصال پروژه به دیتابیس (Connecting the App to Supabase) - **شناسه در سیلابس:** `L7.6` - **فصل:** فصل ۷: داده و بک‌اند (Ch 7) - **نوع محتوا:** 📘 درس‌نامه متنی - **زمان تقریبی مطالعه:** ۱۵ دقیقه - **پیش‌نیازهای مستقیم:** `L7.5` (ساخت جداول و کار با داده‌ها در Supabase) --- ## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: - [ ] **به‌کار ببندد (Apply):** کتابخانه رسمی کلاینت سوپابیس (`@supabase/supabase-js`) را با استفاده از دستورات چندسکویی در پروژه Next.js خود نصب کند. - [ ] **به‌کار ببندد (Apply):** متغیرهای محیطی محرمانه (`NEXT_PUBLIC_SUPABASE_URL` و `NEXT_PUBLIC_SUPABASE_ANON_KEY`) را در فایل `.env.local` تنظیم و ذخیره کند. - [ ] **به‌کار ببندد (Apply):** ماژول یکتا و متمرکز اتصال به پایگاه داده (`src/lib/supabase.ts`) را برای تعامل امن با جداول بسازد. - [ ] **تحلیل/ارزیابی کند (Evaluate):** کدهای دریافت داده در کامپوننت‌های سرور Next.js را با داده‌های ماک قبلی جایگزین کند؛ داده‌های زنده را با دستور `.from('projects').select('*')` فراخوانی کرده و خطایابی کند. - [ ] **به‌کار ببندد (Apply):** نخستین عملیات ایجاد پروژه جدید (Insert) را از طریق فرم ارسال کرده و افزوده شدن آنی آن به جدول دیتابیس ابری را راستی‌آزمایی کند. --- ## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) ### آنچه باید پوشش داده شود (In-Scope): 1. **لحظه تاریخی خداحافظی با داده‌های ماک:** * از این درس به بعد، پروتوتایپ ما به یک محصول تمام‌عیار متصل به دیتابیس ابری تبدیل می‌شود که هر تغییری در آن برای همیشه روی سرورهای جهانی ذخیره خواهد ماند. 2. **نصب کتابخانه رسمی Supabase با منوهای کشویی سیستم‌عامل‌ها:** * دستور نصب پکیج: ```bash npm install @supabase/supabase-js ``` * منوی کشویی ویندوز (Windows). * منوی کشویی مک‌اواس (macOS). * منوی کشویی لینوکس (Linux). 3. **پیکربندی متغیرهای محیطی در `.env.local`:** * ساخت فایل محرمانه `.env.local` در ریشه پروژه. * درج کلیدها: ```env NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` * فلسفه پیشوند `NEXT_PUBLIC_`: چرا Next.js برای کلیدهایی که مرورگر کاربر باید بتواند آن‌ها را بخواند این پیشوند را الزامی کرده است؟ * اطمینان از وجود این فایل در `.gitignore`. 4. **ساخت کلاینت ارتباطی متمرکز (`src/lib/supabase.ts`):** * ساخت فایل و فراخوانی تابع `createClient`: ```typescript import { createClient } from '@supabase/supabase-js'; const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!; const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!; export const supabase = createClient(supabaseUrl, supabaseAnonKey); ``` 5. **خواندن داده‌های زنده در صفحه اصلی (Reading Projects):** * در فایل `src/app/page.tsx` (به صورت Server Component فوق‌العاده سریع): ```typescript const { data: projects, error } = await supabase .from('projects') .select('*') .order('created_at', { ascending: false }); ``` * پاس دادن داده‌های زنده به کامپوننت `ProjectsGrid` و رندر شدن فوری. 6. **ارسال اولین دیتای جدید (Creating a Project):** * پیاده‌سازی متد `insert` در فرم ادمین و تایید ایجاد رکورد. 7. **کال‌اوت‌های Quera:** * `
`: چرا خواندن داده در Server Component بدون نیاز به `useEffect` یا لودینگ‌های خسته‌کننده کلاینتی، اوج قدرت Next.js است؟ * `
`: خطای نخواندن متغیرهای جدید؛ الزام ریستارت کردن سرور (`Ctrl+C` و اجرای مجدد `npm run dev`) بعد از ساخت فایل `.env.local`. ### آنچه نباید وارد آن شویم (Out-of-Scope): - احراز هویت کاربری و محدودیت دسترسی به پنل ادمین (درس بعدی ۷.۷). - تعریف قوانین امنیتی سطح ردیف RLS (درس ۷.۸). --- ## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) | اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | | :--- | :--- | :--- | | Supabase Client | کلاینت سوپابیس | ابزار نرم‌افزاری که دستورات جاوااسکریپت شما را به کوئری‌های امن دیتابیس ترجمه می‌کند | | .env.local | فایل متغیرهای محیطی محلی | فایل ویژه Next.js برای نگهداری آدرس‌ها و کلیدهای محرمانه دور از کدهای سورس | | NEXT_PUBLIC_ Prefix | پیشوند پابلیک نکست | نشانه‌ای که به Next.js اعلام می‌کند مقدار این متغیر می‌تواند به کدهای کلاینت مرورگر فرستاده شود | | Async Data Fetching | دریافت ناهمگام داده | خواندن مستقیم اطلاعات از پایگاه داده در سمت سرور پیش از تولید HTML نهایی صفحه | | Database Mutation | تغییر / جهش داده‌ها | هرگونه عملیات تغییردهنده وضعیت دیتابیس نظیر اضافه کردن، ویرایش یا حذف رکورد | --- ## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) > **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` قرار گرفته و در قالب جدول تک‌خانه‌ای وسط‌چین با کپشن تفصیلی درج شوند: 1. **تصویر کاور درس:** `images/cover.png` * **موضوع:** کاور مدرن با تم تیره که کابل‌های نوری سبز رنگ کلاینت سوپابیس را در حال اتصال فایل‌های فرانت‌اند Next.js به دیتابیس ابری نمایش می‌دهد. 2. **دیاگرام معماری اتصال فرانت‌اند به دیتابیس ابری:** `images/frontend-to-supabase-pipeline.png` * **موضوع:** اینفوگرافیک اتصال: کلیدهای `.env.local` $\rightarrow$ ماژول `lib/supabase.ts` $\rightarrow$ کامپوننت سرور `page.tsx` $\rightarrow$ کوئری به دیتابیس ابری. 3. **نمونه فایل `.env.local` تنظیم‌شده در ادیتور:** `images/env-local-editor-demo.png` * **موضوع:** اسکرین‌شات تمیز از فایل تنظیمات محیطی با نشانی پروژه و کلید عمومی anon. 4. **رندر شدن داده‌های واقعی دیتابیس در مرورگر:** `images/live-database-rendered.png` * **موضوع:** اسکرین‌شات از صفحه اصلی پورتفولیو روی `localhost:3000` که داده‌های زنده خوانده‌شده از Supabase را بدون ماک‌دیتا نمایش می‌دهد. 5. **همگام‌سازی لحظه‌ای؛ ثبت در فرم و نمایش در جدول دیتابیس:** `images/live-sync-verification.png` * **موضوع:** تصویر دونیمه‌ای: سمت چپ زدن دکمه ذخیره در فرم فرانت‌اند و سمت راست ظاهر شدن بلافاصله رکورد در Table Editor سوپابیس. --- ## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) 1. **تیتر اصلی:** `# اتصال پروژه به دیتابیس: پایان دوران داده‌های مصنوعی و آغاز حیات واقعی` 2. **مقدمه:** لحظه هیجان‌انگیز اتصال سیم‌های داده به قلب تپنده پورتفولیو. 3. **جدول کاور درس** 4. **نصب کتابخانه رسمی `@supabase/supabase-js`:** * دستورات منوی کشویی ویندوز (Windows). * دستورات منوی کشویی مک‌اواس (macOS). * دستورات منوی کشویی لینوکس (Linux). 5. **پیکربندی کلیدهای اتصال در فایل محرمانه `.env.local`:** * ثبت آدرس پروژه و کلید عمومی `anon`. * چرا پیشوند `NEXT_PUBLIC_` اهمیت دارد؟ 6. **ساخت ماژول مرکزی کلاینت (`src/lib/supabase.ts`):** یک خط کد برای تمام تعاملات پروژه. 7. **خواندن مستقیم داده‌ها در Server Component:** * جایگزینی Mock Data با کوئری `.from('projects').select('*')`. * مرتب‌سازی بر اساس جدیدترین زمان ایجاد (`order by created_at`). 8. **باکس نکته Quera (`
`):** سرعت خیره‌کننده خواندن داده‌ها در کامپوننت‌های سرور Next.js. 9. **تست عملی ارسال داده جدید به دیتابیس ابری:** ثبت اولین پروژه از طریق فرم فرانت‌اند. 10. **باکس هشدار Quera (`
`):** الزام ریستارت سرور توسعه پس از ویرایش فایل‌های `.env`. 11. **جمع‌بندی درس‌نامه:** زنده شدن پورتفولیو با داده‌های ابری و ورود به درس حیاتی احراز هویت ادمین. --- ## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) - [ ] فرایند نصب پکیج و تنظیم `.env.local` با رعایت منوهای کشویی سیستم‌عامل‌ها آموزش داده شود. - [ ] ماژول کلاینت `src/lib/supabase.ts` به همراه کدهای استاندارد در متن قرار گیرد. - [ ] کوئری دریافت داده در کامپوننت‌های سرور به طور شفاف مستند گردد. - [ ] نحوه تست و راستی‌آزمایی افزوده شدن اطلاعات به دیتابیس زنده نشان داده شود.