اولین نسخه بک‌اند آرامش پلازا

This commit is contained in:
Behrad
2026-08-27 15:15:12 +03:30
commit 854309f976
26 changed files with 1861 additions and 0 deletions
+177
View File
@@ -0,0 +1,177 @@
# بک‌اند آرامش پلازا (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. رمز عبور دیتابیس رو قوی انتخاب کن