Files
aramesh-backend/README.md
T

7.5 KiB
Raw Blame History

بک‌اند آرامش پلازا (FastAPI + PostgreSQL)

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

  • API کامل برای مدیریت محتوا: پروژه‌ها، مقالات، خدمات، تیم، نظرات مشتریان، تایم‌لاین، آمار، سوالات متداول، اطلاعات برند
  • فرم تماس (ذخیره در دیتابیس)
  • فرم خبرنامه (ذخیره در دیتابیس)
  • ورود ادمین با JWT برای مدیریت محتوا (ایجاد/ویرایش/حذف)
  • مستندات خودکار API (Swagger) روی آدرس /docs

قبلاً همه‌ی این محتوا داخل فایل src/data/site.ts توی فرانت‌اند به‌صورت ثابت نوشته شده بود. با این بک‌اند، همون محتوا از دیتابیس میاد و می‌تونی بدون نیاز به دیپلوی دوباره‌ی فرانت، محتوا رو تغییر بدی.


پیش‌نیازها

روی سیستم خودت باید این دو تا نصب باشن:

  1. Python 3.11 یا بالاتر — از python.org دانلود کن
  2. PostgreSQL — از postgresql.org دانلود کن (موقع نصب، یک رمز عبور برای کاربر postgres ازت می‌پرسه؛ یادت بمونه)

برای چک کردن نصب بودنشون:

python --version
psql --version

قدم ۱: ساخت دیتابیس

بعد از نصب PostgreSQL، یک ترمینال باز کن و وارد psql شو:

psql -U postgres

(رمزی که موقع نصب گذاشتی رو وارد کن). حالا داخل psql این دستورها رو بزن:

CREATE USER aramesh_user WITH PASSWORD 'یک-رمز-قوی-انتخاب-کن';
CREATE DATABASE aramesh_db OWNER aramesh_user;
\q

قدم ۲: نصب پروژه

توی پوشه‌ی این پروژه (همونجایی که این فایل README.md هست) یک ترمینال باز کن:

# ساخت محیط مجازی پایتون (اختیاری ولی توصیه‌شده)
python -m venv venv

# فعال‌سازی محیط مجازی
# ویندوز:
venv\Scripts\activate
# مک/لینوکس:
source venv/bin/activate

# نصب کتابخانه‌ها
pip install -r requirements.txt

قدم ۳: تنظیم فایل .env

فایل .env.example رو کپی کن و اسمش رو بذار .env:

# ویندوز (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)

alembic upgrade head

این دستور همه‌ی جدول‌های لازم (پروژه‌ها، مقالات، تماس‌ها و...) رو توی دیتابیست می‌سازه.


قدم ۵: پر کردن دیتابیس با محتوای فعلی سایت

python scripts/seed_data.py

این اسکریپت همون محتوایی که الان توی site.ts هست (پروژه‌ها، مقالات، تیم و...) رو توی دیتابیس می‌ریزه تا سایت خالی نمونه.


قدم ۶: ساخت اکانت ادمین

python scripts/create_admin.py

یک نام کاربری و رمز عبور وارد کن. با همین اکانت وارد پنل مدیریت می‌شی (بعداً وقتی پنل ادمین رو هم بسازیم).


قدم ۷: اجرای سرور

uvicorn app.main:app --reload

اگه همه چیز درست باشه، پیام Application startup complete رو می‌بینی. حالا:


لیست اندپوینت‌های اصلی

بخش آدرس توضیح
پروژه‌ها 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. رمز عبور دیتابیس رو قوی انتخاب کن