# بک‌اند آرامش پلازا (FastAPI + PostgreSQL) این بک‌اند برای سایت **آرامش پلازا** ساخته شده و شامل: - API کامل برای مدیریت محتوا: پروژه‌ها، مقالات، خدمات، تیم، نظرات مشتریان، تایم‌لاین، آمار، سوالات متداول، اطلاعات برند - فرم تماس (ذخیره در دیتابیس) - فرم خبرنامه (ذخیره در دیتابیس) - ورود ادمین با JWT برای مدیریت محتوا (ایجاد/ویرایش/حذف) - مستندات خودکار API (Swagger) روی آدرس `/docs` قبلاً همه‌ی این محتوا داخل فایل `src/data/site.ts` توی فرانت‌اند به‌صورت ثابت نوشته شده بود. با این بک‌اند، همون محتوا از دیتابیس میاد و می‌تونی بدون نیاز به دیپلوی دوباره‌ی فرانت، محتوا رو تغییر بدی. --- ## پیش‌نیازها روی سیستم خودت باید این دو تا نصب باشن: 1. **Python 3.11 یا بالاتر** — از [python.org](https://www.python.org/downloads/) دانلود کن 2. **PostgreSQL** — از [postgresql.org](https://www.postgresql.org/download/) دانلود کن (موقع نصب، یک رمز عبور برای کاربر `postgres` ازت می‌پرسه؛ یادت بمونه) برای چک کردن نصب بودنشون: ```bash python --version psql --version ``` --- ## قدم ۱: ساخت دیتابیس بعد از نصب PostgreSQL، یک ترمینال باز کن و وارد psql شو: ```bash psql -U postgres ``` (رمزی که موقع نصب گذاشتی رو وارد کن). حالا داخل psql این دستورها رو بزن: ```sql CREATE USER aramesh_user WITH PASSWORD 'یک-رمز-قوی-انتخاب-کن'; CREATE DATABASE aramesh_db OWNER aramesh_user; \q ``` --- ## قدم ۲: نصب پروژه توی پوشه‌ی این پروژه (همونجایی که این فایل `README.md` هست) یک ترمینال باز کن: ```bash # ساخت محیط مجازی پایتون (اختیاری ولی توصیه‌شده) python -m venv venv # فعال‌سازی محیط مجازی # ویندوز: venv\Scripts\activate # مک/لینوکس: source venv/bin/activate # نصب کتابخانه‌ها pip install -r requirements.txt ``` --- ## قدم ۳: تنظیم فایل `.env` فایل `.env.example` رو کپی کن و اسمش رو بذار `.env`: ```bash # ویندوز (Command Prompt): copy .env.example .env # مک/لینوکس: cp .env.example .env ``` حالا فایل `.env` رو با یک ادیتور متنی (مثل Notepad یا VS Code) باز کن و این خط رو با اطلاعات واقعی خودت پر کن: ``` DATABASE_URL=postgresql://aramesh_user:همون-رمزی-که-انتخاب-کردی@localhost:5432/aramesh_db ``` خط `SECRET_KEY` رو هم به یک رشته‌ی رندوم و طولانی تغییر بده (هر متن دلخواه طولانی کافیه، برای پروداکشن بهتره واقعاً رندوم باشه). --- ## قدم ۴: ساخت جدول‌های دیتابیس (Migration) ```bash alembic upgrade head ``` این دستور همه‌ی جدول‌های لازم (پروژه‌ها، مقالات، تماس‌ها و...) رو توی دیتابیست می‌سازه. --- ## قدم ۵: پر کردن دیتابیس با محتوای فعلی سایت ```bash python scripts/seed_data.py ``` این اسکریپت همون محتوایی که الان توی `site.ts` هست (پروژه‌ها، مقالات، تیم و...) رو توی دیتابیس می‌ریزه تا سایت خالی نمونه. --- ## قدم ۶: ساخت اکانت ادمین ```bash python scripts/create_admin.py ``` یک نام کاربری و رمز عبور وارد کن. با همین اکانت وارد پنل مدیریت می‌شی (بعداً وقتی پنل ادمین رو هم بسازیم). --- ## قدم ۷: اجرای سرور ```bash uvicorn app.main:app --reload ``` اگه همه چیز درست باشه، پیام `Application startup complete` رو می‌بینی. حالا: - API روی آدرس **http://localhost:8000** در دسترسه - مستندات تعاملی (می‌تونی همونجا API رو تست کنی) روی **http://localhost:8000/docs** --- ## لیست اندپوینت‌های اصلی | بخش | آدرس | توضیح | |---|---|---| | پروژه‌ها | `GET /api/projects` | لیست همه پروژه‌ها | | پروژه‌ها | `GET /api/projects/{slug}` | جزئیات یک پروژه | | مقالات | `GET /api/articles` | لیست همه مقالات | | مقالات | `GET /api/articles/{slug}` | جزئیات یک مقاله | | خدمات | `GET /api/services` | لیست خدمات | | تیم | `GET /api/team` | اعضای تیم | | نظرات مشتریان | `GET /api/testimonials` | نظرات | | تایم‌لاین | `GET /api/timeline` | تاریخچه شرکت | | چرا ما | `GET /api/why-us` | نکات "چرا آرامش پلازا" | | آمار | `GET /api/stats` | آمار صفحه اصلی | | سوالات متداول | `GET /api/faqs` | لیست FAQ | | برند | `GET /api/brand` | اطلاعات تماس/لوگو/آدرس | | تماس | `POST /api/contact` | ثبت فرم تماس (عمومی) | | خبرنامه | `POST /api/newsletter` | عضویت در خبرنامه (عمومی) | | ورود ادمین | `POST /api/auth/login` | گرفتن توکن JWT | تمام درخواست‌های `GET` روی این منابع **عمومی** هستن (فرانت‌اند بدون نیاز به ورود می‌تونه بخونتشون). تمام درخواست‌های `POST` / `PUT` / `DELETE` (به‌جز فرم تماس و خبرنامه) نیاز به توکن ادمین دارن — یعنی باید هدر زیر رو بفرستی: ``` Authorization: Bearer <توکنی-که-از-لاگین-گرفتی> ``` --- ## اتصال فرانت‌اند به این بک‌اند فرانت‌اند فعلی (`src/data/site.ts`) داده‌ها رو به‌صورت ثابت داره. برای اتصال به این بک‌اند باید: 1. به‌جای import کردن از `site.ts`، هر کامپوننت داده‌هاش رو با `fetch` یا `axios` از این آدرس‌ها بگیره (مثلاً `fetch('http://localhost:8000/api/projects')`) 2. فرم `ContactSection.tsx` و `Newsletter.tsx` به‌جای فقط تغییر state داخلی، باید یک درخواست `POST` به `/api/contact` و `/api/newsletter` بفرستن اگه بخوای، توی یک مرحله‌ی بعدی می‌تونم دقیقاً همین تغییرات رو توی کدهای فرانت‌اندت اعمال کنم تا کامل به این بک‌اند وصل بشه. --- ## دیپلوی (وقتی آماده‌ی انتشار شدی) گزینه‌های ساده برای هاست این بک‌اند: - **Railway** یا **Render**: خیلی راحت از روی گیت‌هاب دیپلوی می‌کنن و PostgreSQL هم بهت می‌دن - سرور شخصی با Docker یا مستقیم با `uvicorn`/`gunicorn` نکته مهم امنیتی: قبل از دیپلوی روی سرور واقعی، حتماً: 1. یک `SECRET_KEY` رندوم و قوی بذار (نه همون مقدار پیش‌فرض) 2. آدرس دقیق دامنه‌ی فرانت‌اندت (مثلاً `https://aramesh-six.vercel.app`) رو توی `CORS_ORIGINS` بذار 3. رمز عبور دیتابیس رو قوی انتخاب کن