"""اسکریپت seed دیتابیس. اجرا: python -m app.seed # فقط جدول‌های خالی پر می‌شوند python -m app.seed --force # حذف کامل داده‌ها و ساخت مجدد پر کردن هر جدول مستقل است: روی یک دیتابیس موجود، فقط جدول‌های جدید یا خالی seed می‌شوند و داده‌های قبلی دست‌نخورده می‌مانند. """ import argparse from typing import Any from . import models, seed_data from .auth import hash_password from .config import settings from .database import Base, SessionLocal, engine # (مدل، داده‌های اولیه، برچسب گزارش) CONTENT: list[tuple[Any, list[dict], str]] = [ (models.Brand, [seed_data.BRAND], "برند"), (models.Hero, [seed_data.HERO], "هیرو صفحه اصلی"), (models.StorySection, [seed_data.STORY], "داستان ما"), (models.SectionHeadingContent, seed_data.SECTION_HEADINGS, "تیتر بخش‌ها"), (models.PageHeroContent, seed_data.PAGE_HEROES, "هیرو صفحات"), (models.NavItem, seed_data.NAV_ITEMS, "منوی ناوبری"), (models.InvestmentModel, seed_data.INVESTMENT_MODELS, "مدل‌های سرمایه‌گذاری"), (models.ProcessStep, seed_data.PROCESS_STEPS, "مراحل فرآیند کار"), (models.Office, seed_data.OFFICES, "دفاتر"), (models.GalleryImage, seed_data.GALLERY_IMAGES, "گالری تصاویر"), (models.StatusLabel, seed_data.STATUS_LABELS, "برچسب وضعیت پروژه"), (models.ContactSectionContent, [seed_data.CONTACT_SECTION], "بخش تماس"), (models.NewsletterSectionContent, [seed_data.NEWSLETTER], "خبرنامه"), (models.FooterContent, [seed_data.FOOTER], "فوتر"), (models.Service, seed_data.SERVICES, "خدمات"), (models.Stat, seed_data.STATS, "آمار"), (models.Project, seed_data.PROJECTS, "پروژه‌ها"), (models.Article, seed_data.ARTICLES, "مقالات"), (models.Testimonial, seed_data.TESTIMONIALS, "نظرات"), (models.Faq, seed_data.FAQS, "سوالات متداول"), (models.TeamMember, seed_data.TEAM, "تیم"), (models.TimelineItem, seed_data.TIMELINE, "تایم‌لاین"), (models.WhyUsItem, seed_data.WHY, "چرا آرامش"), (models.BeforeAfter, [seed_data.BEFORE_AFTER], "قبل/بعد"), ] def seed(force: bool = False) -> None: db = SessionLocal() try: if force: Base.metadata.drop_all(bind=engine) print("جداول قبلی حذف شدند.") Base.metadata.create_all(bind=engine) for model, rows, label in CONTENT: if db.query(model).count() > 0: continue for row in rows: db.add(model(**row)) 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() for model, _, label in CONTENT: print(f" {label}: {db.query(model).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)