feat: update UI to glassmorphic design and copper theme
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
"""اسکریپت 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
|
||||
from .migrations import paragraphs_to_doc, run_all as run_migrations
|
||||
|
||||
# (مدل، دادههای اولیه، برچسب گزارش)
|
||||
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], "قبل/بعد"),
|
||||
(models.SeoMeta, seed_data.SEO_META, "سئوی صفحات"),
|
||||
]
|
||||
|
||||
|
||||
def seed(force: bool = False) -> None:
|
||||
db = SessionLocal()
|
||||
try:
|
||||
if force:
|
||||
Base.metadata.drop_all(bind=engine)
|
||||
print("جداول قبلی حذف شدند.")
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
run_migrations()
|
||||
|
||||
for model, rows, label in CONTENT:
|
||||
if db.query(model).count() > 0:
|
||||
continue
|
||||
for idx, row in enumerate(rows):
|
||||
payload = dict(row)
|
||||
if hasattr(model, "position") and "position" not in payload:
|
||||
payload["position"] = idx
|
||||
# بدنه مقالات در seed بهصورت لیست پاراگراف است — به سند تبدیل میشود
|
||||
if model is models.Article and isinstance(payload.get("body"), list):
|
||||
payload["body"] = paragraphs_to_doc(payload["body"])
|
||||
db.add(model(**payload))
|
||||
|
||||
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)
|
||||
Reference in New Issue
Block a user