- اتصال کامل فرانت به API: همه محتوای سایت (پروژهها، مقالات، خدمات، برند و...) از بکاند خوانده میشود (SiteProvider + useSite) - فرم تماس و خبرنامه متصل به بکاند و تستشده در مرورگر - ساختار مونوریپو: frontend/ + backend/ - Dockerfile برای هر دو بخش + docker-compose (PostgreSQL + FastAPI + nginx) - nginx با پروکسی /api — بدون نیاز به CORS در حالت داکر - README کامل فارسی
85 lines
3.1 KiB
Python
85 lines
3.1 KiB
Python
"""اسکریپت 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)
|