پروژه کامل: فرانت متصل به API + داکرایز

- اتصال کامل فرانت به API: همه محتوای سایت (پروژه‌ها، مقالات، خدمات، برند و...) از بک‌اند خوانده می‌شود (SiteProvider + useSite)
- فرم تماس و خبرنامه متصل به بک‌اند و تست‌شده در مرورگر
- ساختار مونوریپو: frontend/ + backend/
- Dockerfile برای هر دو بخش + docker-compose (PostgreSQL + FastAPI + nginx)
- nginx با پروکسی /api — بدون نیاز به CORS در حالت داکر
- README کامل فارسی
This commit is contained in:
Behrad
2026-08-29 13:26:58 +03:30
parent ed14435485
commit ad75f7a7bd
78 changed files with 8242 additions and 133 deletions
+84
View File
@@ -0,0 +1,84 @@
"""اسکریپت seed دیتابیس.
اجرا:
python -m app.seed # فقط اگر دیتابیس خالی باشد
python -m app.seed --force # حذف کامل داده‌ها و ساخت مجدد
"""
import argparse
from . import models, seed_data
from .auth import hash_password
from .config import settings
from .database import Base, SessionLocal, engine
def seed(force: bool = False) -> None:
db = SessionLocal()
try:
if force:
Base.metadata.drop_all(bind=engine)
print("جداول قبلی حذف شدند.")
Base.metadata.create_all(bind=engine)
if not force and db.query(models.Service).count() > 0:
print("دیتابیس قبلاً seed شده است. برای بازنشانی کامل: python -m app.seed --force")
return
db.add(models.Brand(**seed_data.BRAND))
for item in seed_data.SERVICES:
db.add(models.Service(**item))
for item in seed_data.STATS:
db.add(models.Stat(**item))
for item in seed_data.PROJECTS:
db.add(models.Project(**item))
for item in seed_data.ARTICLES:
db.add(models.Article(**item))
for item in seed_data.TESTIMONIALS:
db.add(models.Testimonial(**item))
for item in seed_data.FAQS:
db.add(models.Faq(**item))
for item in seed_data.TEAM:
db.add(models.TeamMember(**item))
for item in seed_data.TIMELINE:
db.add(models.TimelineItem(**item))
for item in seed_data.WHY:
db.add(models.WhyUsItem(**item))
db.add(models.BeforeAfter(**seed_data.BEFORE_AFTER))
if db.query(models.AdminUser).count() == 0:
db.add(
models.AdminUser(
username=settings.admin_username,
password_hash=hash_password(settings.admin_password),
)
)
print(f"کاربر ادمین ساخته شد: {settings.admin_username}")
db.commit()
counts = {
"خدمات": db.query(models.Service).count(),
"پروژه‌ها": db.query(models.Project).count(),
"مقالات": db.query(models.Article).count(),
"نظرات": db.query(models.Testimonial).count(),
"سوالات متداول": db.query(models.Faq).count(),
"تیم": db.query(models.TeamMember).count(),
"تایم‌لاین": db.query(models.TimelineItem).count(),
"آمار": db.query(models.Stat).count(),
"چرا آرامش": db.query(models.WhyUsItem).count(),
}
for label, count in counts.items():
print(f" {label}: {count} رکورد")
print("✔ seed با موفقیت انجام شد.")
finally:
db.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Seed کردن دیتابیس آرامش پلازا")
parser.add_argument("--force", action="store_true", help="حذف همه جداول و ساخت مجدد")
args = parser.parse_args()
seed(force=args.force)