178 lines
7.5 KiB
Markdown
178 lines
7.5 KiB
Markdown
# بکاند آرامش پلازا (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. رمز عبور دیتابیس رو قوی انتخاب کن
|