اولین نسخه بکاند آرامش پلازا
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""
|
||||
اسکریپت ساخت اولین کاربر ادمین.
|
||||
اجرا: python scripts/create_admin.py
|
||||
"""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from getpass import getpass
|
||||
|
||||
from app.database import SessionLocal
|
||||
from app.models import AdminUser
|
||||
from app.auth import hash_password
|
||||
|
||||
|
||||
def main():
|
||||
username = input("نام کاربری ادمین: ").strip()
|
||||
password = getpass("رمز عبور: ").strip()
|
||||
password2 = getpass("تکرار رمز عبور: ").strip()
|
||||
|
||||
if not username or not password:
|
||||
print("نام کاربری و رمز عبور نمیتوانند خالی باشند.")
|
||||
return
|
||||
if password != password2:
|
||||
print("رمزهای عبور یکسان نیستند.")
|
||||
return
|
||||
|
||||
db = SessionLocal()
|
||||
try:
|
||||
existing = db.query(AdminUser).filter(AdminUser.username == username).first()
|
||||
if existing:
|
||||
print(f"کاربری با نام '{username}' از قبل وجود دارد.")
|
||||
return
|
||||
admin = AdminUser(username=username, hashed_password=hash_password(password))
|
||||
db.add(admin)
|
||||
db.commit()
|
||||
print(f"کاربر ادمین '{username}' با موفقیت ساخته شد.")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,242 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
این اسکریپت دیتابیس رو با همون محتوایی که الان توی فرانتاند (src/data/site.ts)
|
||||
بهصورت ثابت نوشته شده، پر میکنه. اینطوری وقتی فرانت رو به بکاند وصل کردی،
|
||||
سایت خالی نمیمونه و دقیقاً همون محتوای فعلی رو از دیتابیس میگیره.
|
||||
|
||||
اجرا: python scripts/seed_data.py
|
||||
(چند بار اجرا کردنش مشکلی نداره -- اگه رکوردی از قبل باشه، دوباره اضافه نمیکنه)
|
||||
"""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from app.database import SessionLocal
|
||||
from app import models
|
||||
|
||||
IMAGES = [
|
||||
'https://i.postimg.cc/wTQ0QFkG/Gemini-Generated-Image-1tjszd1tjszd1tjs.png',
|
||||
'https://i.postimg.cc/1zfBPS1G/Gemini-Generated-Image-at69yhat69yhat69.png',
|
||||
'https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png',
|
||||
'https://i.postimg.cc/4xFvW0HX/Gemini-Generated-Image-n7mhonn7mhonn7mh.png',
|
||||
'https://i.postimg.cc/N036cr4s/Gemini-Generated-Image-ytbhvvytbhvvytbh.png',
|
||||
]
|
||||
|
||||
BRAND = dict(
|
||||
name='آرامش پلازا',
|
||||
logo='https://i.postimg.cc/XYNrsHsM/Chat-GPT-Image-Aug-6-2026-04-34-46-PM.png',
|
||||
hero='https://i.postimg.cc/J0bKgQVg/Gemini-Generated-Image-mdh969mdh969mdh9.png',
|
||||
contact_bg='https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png',
|
||||
phone='۰۲۱ ۸۸ ۷۴ ۲۲ ۱۰',
|
||||
phone_href='tel:+982188742210',
|
||||
email='info@arameshplaza.com',
|
||||
address='تهران، خیابان ولیعصر، برج آرامش، طبقه هجدهم',
|
||||
)
|
||||
|
||||
SERVICES = [
|
||||
dict(title='طراحی معماری', desc='خلق فرمهای معاصر با نگاه ایرانی؛ از کانسپت اولیه تا نقشههای اجرایی و جزئیات نما.', icon='draft'),
|
||||
dict(title='ساخت برجهای مسکونی', desc='اجرای برجهای بلندمرتبه با استانداردهای سازهای بینالمللی و کیفیت تحویل بینقص.', icon='tower'),
|
||||
dict(title='مجتمعهای تجاری', desc='طراحی و ساخت مراکز تجاری با مطالعه دقیق جریان مخاطب و بازدهی بلندمدت سرمایه.', icon='mall'),
|
||||
dict(title='ویلاسازی', desc='ویلاهای اختصاصی همنشین با طبیعت؛ محرمانگی، نور طبیعی و مصالح ماندگار.', icon='villa'),
|
||||
dict(title='بازسازی', desc='بازآفرینی ساختمانهای موجود با ارتقای سازه، نما و تجربه زندگی در فضا.', icon='renew'),
|
||||
dict(title='مدیریت پروژه', desc='کنترل همزمان زمان، هزینه و کیفیت با گزارشدهی شفاف در تمام مراحل ساخت.', icon='manage'),
|
||||
dict(title='سرمایهگذاری ساختمانی', desc='ساختارهای مشارکت شفاف، ارزیابی ریسک و طراحی سبد ملکی متناسب با سرمایه شما.', icon='invest'),
|
||||
dict(title='محوطهسازی و لنداسکیپ', desc='طراحی حیاط، بام سبز و مسیرهای دسترسی؛ ادامه معماری در فضای باز پروژه.', icon='landscape'),
|
||||
]
|
||||
|
||||
STATS = [
|
||||
dict(value=21, suffix='+', label='سال تجربه ساخت'),
|
||||
dict(value=47, suffix='', label='پروژه تحویلشده'),
|
||||
dict(value=860, suffix='هزار', label='مترمربع زیربنا'),
|
||||
dict(value=1200, suffix='+', label='خانواده ساکن'),
|
||||
]
|
||||
|
||||
PROJECTS = [
|
||||
dict(slug='aramesh-elahieh', title='برج آرامش الهیه', location='تهران، الهیه', year='۱۴۰۲', status='done',
|
||||
image=IMAGES[0], gallery=[IMAGES[0], IMAGES[3], IMAGES[1]], area='۲۴٬۰۰۰ متر مربع', floors='۱۸ طبقه',
|
||||
units='۵۶ واحد', client='سرمایهگذاری خصوصی',
|
||||
summary='یک برج مسکونی لوکس با نمای سنگ تراورتن و پوسته دوپوستهای که مصرف انرژی را تا ۳۵ درصد کاهش داده است.',
|
||||
body=[
|
||||
'برج آرامش الهیه روی زمینی با شیب طبیعی شمالی طراحی شد؛ همین شیب فرصت داد تا لابی، استخر و فضاهای مشترک در سه تراز مختلف بنشینند و همه واحدها دید بیواسطه به شهر داشته باشند.',
|
||||
'پوسته بیرونی ترکیبی از سنگ تراورتن روشن و پنجرههای قدی با شیشه سهجداره است. سایهبانهای عمودی مسیرنگ، نور مستقیم تابستان را میشکنند و در زمستان اجازه ورود کامل نور را میدهند.',
|
||||
'اجرای پروژه در سیودو ماه به پایان رسید و تمام واحدها پیش از تحویل کلید به فروش رسیدند.',
|
||||
]),
|
||||
dict(slug='parseh-mall', title='مجتمع تجاری پارسه', location='اصفهان، مرکز شهر', year='۱۴۰۱', status='done',
|
||||
image=IMAGES[1], gallery=[IMAGES[1], IMAGES[2], IMAGES[4]], area='۳۸٬۵۰۰ متر مربع', floors='۷ طبقه',
|
||||
units='۱۴۰ واحد تجاری', client='گروه سرمایهگذاری پارسه',
|
||||
summary='مرکز تجاری با آتریوم مرکزی و نورگیر سقفی که جریان مخاطب را بهصورت طبیعی در همه ترازها توزیع میکند.',
|
||||
body=[
|
||||
'مطالعه رفتار مخاطب پیش از طراحی نشان داد کوتاهترین مسیر عمودی، کلید موفقیت تجاری این مجموعه است؛ بنابراین آتریوم مرکزی با پلهبرقیهای قطری در قلب پلان قرار گرفت.',
|
||||
'نورگیر سقفی با شیشه لو-ای، روشنایی روز را تا تراز منفی دو میرساند و مصرف روشنایی مصنوعی را بهطور محسوس کاهش میدهد.',
|
||||
'مجموعه دو ماه پیش از موعد قراردادی به بهرهبرداری رسید.',
|
||||
]),
|
||||
dict(slug='daryakenar-villas', title='ویلاهای دریاکنار', location='مازندران، نوشهر', year='۱۴۰۰', status='done',
|
||||
image=IMAGES[2], gallery=[IMAGES[2], IMAGES[4], IMAGES[0]], area='۹٬۲۰۰ متر مربع', floors='۲ طبقه',
|
||||
units='۱۲ ویلا', client='مجموعه خصوصی دریاکنار',
|
||||
summary='دوازده ویلای اختصاصی با چیدمان شانهای که برای هر واحد، دید مستقیم به دریا و محرمانگی کامل فراهم میکند.',
|
||||
body=[
|
||||
'چیدمان شانهای ویلاها نتیجه دهها بررسی زاویه دید بود؛ هیچ ویلایی در دید ویلای دیگر نیست و همه به دریا باز میشوند.',
|
||||
'مصالح، پاسخی به اقلیم مرطوب شمال است: چوب ترموود، بتن اکسپوز و پوششهای ضد نمک برای فلزات نما.',
|
||||
'محوطه با گیاهان بومی طراحی شد تا نیاز آبیاری در طول سال حداقل باشد.',
|
||||
]),
|
||||
dict(slug='niavaran-twins', title='برج دوقلوی نیاوران', location='تهران، نیاوران', year='۱۳۹۹', status='done',
|
||||
image=IMAGES[3], gallery=[IMAGES[3], IMAGES[0], IMAGES[2]], area='۳۱٬۷۰۰ متر مربع', floors='۲۰ طبقه',
|
||||
units='۸۰ واحد', client='مشارکت با مالکان زمین',
|
||||
summary='دو برج همسان با پادست مشترک که فضاهای رفاهی و پارکینگها را در یک تراز واحد ادغام میکند.',
|
||||
body=[
|
||||
'دو برج روی یک پادست مشترک نشستهاند؛ این تصمیم اجازه داد فضاهای رفاهی، سالن اجتماعات و پارکینگها بین دو ساختمان مشترک شوند و سطح اشغال باغ کاهش یابد.',
|
||||
'سازه با سیستم دیوار برشی و دال پسکشیده اجرا شد تا دهانههای داخلی آزاد و پلانها قابل شخصیسازی باشند.',
|
||||
]),
|
||||
dict(slug='kish-garden-tower', title='باغبرج کیش', location='کیش، مروارید', year='۱۴۰۵ (پیشبینی)', status='progress',
|
||||
image=IMAGES[4], gallery=[IMAGES[4], IMAGES[1], IMAGES[3]], area='۱۸٬۴۰۰ متر مربع', floors='۱۴ طبقه',
|
||||
units='۶۲ واحد اقامتی', client='صندوق پروژهمحور آرامش',
|
||||
summary='باغبرجی اقامتی با تراسهای سبز پیوسته که در حال ساخت است؛ پیشرفت فیزیکی پروژه ۴۸ درصد.',
|
||||
body=[
|
||||
'تراسهای سبز پیوسته، پوستهای زنده برای ساختمان میسازند که در اقلیم گرم جزیره، دمای سطح نما را بهطور محسوس پایین میآورد.',
|
||||
'در حال حاضر سازه تا تراز طبقه نهم اجرا شده و نصب نما از ضلع جنوبی آغاز شده است.',
|
||||
]),
|
||||
dict(slug='aramesh-business-center', title='مرکز تجاری آرامش تهران', location='تهران، سعادتآباد', year='۱۴۰۶ (پیشبینی)', status='progress',
|
||||
image=IMAGES[1], gallery=[IMAGES[1], IMAGES[3], IMAGES[4]], area='۲۷٬۳۰۰ متر مربع', floors='۱۲ طبقه',
|
||||
units='۹۰ دفتر اداری', client='مشارکت با هلدینگ آرامش',
|
||||
summary='مجتمع اداری-تجاری با هسته مرکزی شفاف و لابی دوبلکس؛ در مرحله اجرای سفتکاری.',
|
||||
body=[
|
||||
'برنامهریزی فضایی این مجموعه بر اساس دفاتر انعطافپذیر انجام شد؛ هر تراز میتواند به دو، سه یا شش دفتر مستقل تقسیم شود.',
|
||||
'اجرای تأسیسات مکانیکی بهصورت همزمان با سفتکاری پیش میرود تا زمان کل پروژه کوتاهتر شود.',
|
||||
]),
|
||||
]
|
||||
|
||||
TIMELINE = [
|
||||
dict(year='۱۳۸۳', title='آغاز مسیر', desc='تأسیس دفتر معماری آرامش با تیمی چهارنفره و نخستین پروژه بازسازی در تهران.', image=IMAGES[2]),
|
||||
dict(year='۱۳۸۵', title='نخستین ساخت مستقل', desc='تحویل اولین ساختمان مسکونی هفتطبقه؛ آغاز همکاری با پیمانکاران سازهای بزرگ.', image=IMAGES[0]),
|
||||
dict(year='۱۳۸۷', title='ورود به بازار تجاری', desc='طراحی و اجرای اولین مجتمع تجاری با رویکرد بازدهی سرمایه و جریان مخاطب.', image=IMAGES[1]),
|
||||
dict(year='۱۳۸۹', title='استاندارد بینالمللی', desc='استقرار نظام کنترل کیفیت و دریافت گواهینامههای مدیریت پروژه.', image=IMAGES[4]),
|
||||
dict(year='۱۳۹۵', title='بلندمرتبهسازی', desc='آغاز ساخت نخستین برج بیستطبقه شرکت در شمال تهران.', image=IMAGES[3]),
|
||||
dict(year='۱۴۰۳', title='آرامش پلازا امروز', desc='پرتفوی ۴۷ پروژه، دفاتر در سه شهر و صندوق سرمایهگذاری ساختمانی اختصاصی.', image=IMAGES[0]),
|
||||
]
|
||||
|
||||
WHY = [
|
||||
dict(title='کیفیت بدون مصالحه', desc='انتخاب مصالح و مجریان بر اساس ماندگاری چنددههای، نه سریعترین تحویل.'),
|
||||
dict(title='شفافیت مالی کامل', desc='گزارش ماهانه هزینهها و پیشرفت فیزیکی برای همه شرکای پروژه.'),
|
||||
dict(title='تحویل بهموقع', desc='۹۴٪ پروژههای ما در بازه زمانی قراردادی یا زودتر تحویل داده شدهاند.'),
|
||||
dict(title='طراحی اختصاصی', desc='هیچ نقشهای دو بار اجرا نمیشود؛ هر پروژه هویت معماری خودش را دارد.'),
|
||||
dict(title='خدمات پس از تحویل', desc='پنج سال پشتیبانی فنی و نگهداری تأسیسات پس از تحویل کلید.'),
|
||||
dict(title='پایداری و انرژی', desc='طراحی پوسته و تأسیسات با هدف کاهش مصرف انرژی تا ۳۵ درصد.'),
|
||||
]
|
||||
|
||||
TESTIMONIALS = [
|
||||
dict(name='مهندس سارا کیانی', role='سرمایهگذار پروژه پارسه', quote='گزارشهای ماهانه آرامش پلازا آنقدر دقیق بود که هیچوقت نیاز نشد نگران سرمایهام باشم. پروژه دو ماه زودتر از موعد به بهرهبرداری رسید.'),
|
||||
dict(name='دکتر امیرحسین راد', role='ساکن برج الهیه', quote='کیفیت اجرا در جزئیاتی دیده میشود که معمولاً کسی به آنها فکر نمیکند؛ از عایق صوتی پنجرهها تا نور غیرمستقیم راهروها.'),
|
||||
dict(name='مریم دلاور', role='مدیر مجموعه ویلاهای دریاکنار', quote='همکاری با تیم طراحی، تجربهای واقعاً حرفهای بود. ایدههای ما را شنیدند و به زبان معماری ترجمه کردند.'),
|
||||
]
|
||||
|
||||
TEAM = [
|
||||
dict(name='کامران آرامش', role='بنیانگذار و مدیرعامل', bio='بیش از سه دهه تجربه در ساخت بلندمرتبه.'),
|
||||
dict(name='نگار شریفی', role='مدیر ارشد طراحی', bio='معمار ارشد، فارغالتحصیل دانشگاه تهران و میلان.'),
|
||||
dict(name='بهزاد مرادی', role='مدیر اجرایی پروژهها', bio='مسئول کنترل کیفیت و زمانبندی همه کارگاهها.'),
|
||||
dict(name='الهام نیکآیین', role='مدیر سرمایهگذاری', bio='طراح ساختارهای مشارکت و تحلیل بازدهی ملکی.'),
|
||||
]
|
||||
|
||||
ARTICLES = [
|
||||
dict(slug='natural-light', title='معماری آرام: چرا نور طبیعی گرانترین مصالح ساختمان است؟', date='۲۴ مرداد ۱۴۰۳',
|
||||
category='معماری', image=IMAGES[1], read='۶ دقیقه',
|
||||
excerpt='نور طبیعی نهتنها کیفیت زندگی در فضا را تعیین میکند، بلکه مستقیماً بر مصرف انرژی و ارزش بلندمدت ملک اثر میگذارد.',
|
||||
body=[
|
||||
'در بازار ساختوساز، ارزش یک واحد اغلب با متراژ سنجیده میشود؛ اما تجربه ما در بیست سال گذشته نشان داده کیفیت نور، تعیینکنندهتر از چند متر اضافه است.',
|
||||
'جهتگیری ساختمان، عمق دهانه و ارتفاع کف تا سقف، سه متغیر اصلی نور طبیعی هستند. تصمیم درباره هر سه، پیش از ترسیم اولین پلان گرفته میشود و بعد از آن تقریباً برگشتپذیر نیست.',
|
||||
'در برج آرامش الهیه، چرخش ۱۲ درجهای توده ساختمان نسبت به شمال، دو ساعت نور مفید بیشتر در روزهای زمستان به واحدها اضافه کرد؛ تصمیمی بیهزینه با اثری چنددههای.',
|
||||
'برای انتخاب یک واحد، پیشنهاد ما ساده است: بازدید را در ساعتهای میانی صبح و اواخر بعدازظهر انجام دهید و کیفیت نور را در همان ساعتهایی بسنجید که واقعاً در خانه هستید.',
|
||||
]),
|
||||
dict(slug='real-estate-portfolio', title='راهنمای انتخاب سبد سرمایهگذاری ملکی در بازار امروز', date='۱۰ مرداد ۱۴۰۳',
|
||||
category='سرمایهگذاری', image=IMAGES[3], read='۹ دقیقه',
|
||||
excerpt='سه معیار کلیدی برای تشکیل سبدی متعادل از دارایی ملکی، بر اساس افق زمانی و سطح ریسک شما.',
|
||||
body=[
|
||||
'سبد ملکی متعادل، ترکیبی از داراییهای با نقدشوندگی متفاوت است؛ نه همه سرمایه در یک پروژه بلندمدت، نه همه در واحدهای آماده.',
|
||||
'افق زمانی، نخستین معیار است. اگر برنامه شما کمتر از دو سال است، پیشخرید در پروژهای که تازه شروع شده انتخاب پرریسکی خواهد بود.',
|
||||
'معیار دوم شفافیت گزارشدهی است. بدون گزارش ماهانه پیشرفت فیزیکی و مالی، ارزیابی وضعیت سرمایه شما عملاً غیرممکن است.',
|
||||
'معیار سوم، تنوع کاربری است. ترکیب مسکونی و تجاری، نوسان بازدهی سبد را در دورههای رکود محسوس کاهش میدهد.',
|
||||
]),
|
||||
dict(slug='facade-quality', title='پنج نکته فنی که کیفیت نما را پس از ده سال مشخص میکند', date='۲۸ تیر ۱۴۰۳',
|
||||
category='اجرا', image=IMAGES[4], read='۵ دقیقه',
|
||||
excerpt='نمای ساختمان در سال اول زیبا به نظر میرسد؛ تفاوت کیفیت اجرا در سال دهم آشکار میشود.',
|
||||
body=[
|
||||
'اتصالات مکانیکی سنگ نما، مهمتر از خود سنگ است. اتصال چسبی در اقلیم سردوگرم ایران عمر کوتاهی دارد.',
|
||||
'درزهای انقباضی باید در نقشه دیده شوند، نه در کارگاه تصمیمگیری شوند؛ نبودشان اولین دلیل ترکهای افقی نما است.',
|
||||
'آببندی دور پنجره، پرتکرارترین نقطه شکست است. اجرای نوار آببند پیش از نصب قرنیز، این ریسک را حذف میکند.',
|
||||
'زیرسازی گالوانیزه گرم، در برابر زیرسازی رنگشده، تفاوت قیمت اندکی دارد و تفاوت عمر بسیار زیادی.',
|
||||
'در پایان، برنامه بازدید دورهای سالانه نما را جدی بگیرید؛ ترمیم یک درز، هزینهای در حد هیچ در برابر بازسازی کل نما است.',
|
||||
]),
|
||||
dict(slug='commercial-yield', title='چگونه بازدهی یک پروژه تجاری را پیش از ساخت تخمین بزنیم؟', date='۱۵ تیر ۱۴۰۳',
|
||||
category='سرمایهگذاری', image=IMAGES[2], read='۷ دقیقه',
|
||||
excerpt='مدل سادهای برای برآورد بازدهی، بر پایه جریان مخاطب، ترکیب واحدها و نرخ اجاره منطقه.',
|
||||
body=[
|
||||
'برآورد بازدهی تجاری با سه عدد آغاز میشود: جریان روزانه مخاطب، نرخ اجاره هر مترمربع در منطقه و نسبت سطح مفید به کل.',
|
||||
'خطای رایج، نادیدهگرفتن ترازهای بالاتر است. بدون طراحی درست مسیر عمودی، ترازهای سه به بالا معمولاً نیمی از نرخ تراز همکف را هم بهدست نمیآورند.',
|
||||
'در نهایت، سناریوی محافظهکارانه را هم بنویسید؛ اگر پروژه در سناریوی بدبینانه هم توجیه داشت، سرمایهگذاری منطقی است.',
|
||||
]),
|
||||
dict(slug='facade-materials', title='مصالح نما: مقایسه سنگ، کامپوزیت و ترموود در اقلیم ایران', date='۲ تیر ۱۴۰۳',
|
||||
category='اجرا', image=IMAGES[0], read='۸ دقیقه',
|
||||
excerpt='هر مصالح نما در اقلیم متفاوتی درست کار میکند؛ انتخاب اشتباه، هزینه نگهداری را چند برابر میکند.',
|
||||
body=[
|
||||
'سنگ در اقلیم خشک، بهترین ماندگاری را دارد؛ اما وزن آن نیازمند زیرسازی دقیق و محاسبه سازهای است.',
|
||||
'کامپوزیت انتخاب سریع و سبکی است، مشروط بر انتخاب گرید ضد آتش و درنظرگرفتن انقباض حرارتی در طول ورق.',
|
||||
'ترموود در اقلیم مرطوب شمال، بهترین پاسخ زیباییشناسانه است، ولی برنامه نگهداری دوسالانه دارد.',
|
||||
]),
|
||||
dict(slug='renovate-or-rebuild', title='بازسازی یا نوسازی؟ معیارهای تصمیمگیری برای مالکان', date='۲۰ خرداد ۱۴۰۳',
|
||||
category='معماری', image=IMAGES[1], read='۶ دقیقه',
|
||||
excerpt='اگر عمر سازه و ضوابط شهری اجازه دهند، بازسازی میتواند بازدهی بالاتری از تخریب کامل داشته باشد.',
|
||||
body=[
|
||||
'نخست وضعیت سازه ارزیابی میشود؛ اگر مقاومسازی هزینهای بیش از ۴۰ درصد ساخت نو دارد، نوسازی منطقیتر است.',
|
||||
'دومین معیار، ضوابط شهری روز است. گاهی تخریب، سطح زیربنای مجاز کمتری به شما میدهد و این تصمیم را کاملاً تغییر میدهد.',
|
||||
'در بازسازی، بیشترین ارزش افزوده از سه جا میآید: نما، ورودی و بازآرایی پلان داخلی.',
|
||||
]),
|
||||
]
|
||||
|
||||
FAQS = [
|
||||
dict(q='حداقل سرمایه برای مشارکت در پروژههای آرامش پلازا چقدر است؟', a='ساختار مشارکت هر پروژه متفاوت است، اما معمولاً واحدهای سرمایهگذاری از سطح مشخصی آغاز میشوند و جزئیات دقیق در جلسه ارزیابی اولیه ارائه میشود.'),
|
||||
dict(q='مدت زمان معمول ساخت یک برج مسکونی چقدر است؟', a='بسته به تعداد طبقات و شرایط زمین، میانگین اجرای یک برج مسکونی بین ۲۸ تا ۴۲ ماه از زمان صدور پروانه تا تحویل کلید است.'),
|
||||
dict(q='آیا امکان تغییر نقشه داخلی واحد وجود دارد؟', a='بله. تا پیش از پایان مرحله سفتکاری، امکان شخصیسازی پلان داخلی با هماهنگی تیم طراحی و تأیید سازه فراهم است.'),
|
||||
dict(q='خدمات پس از تحویل شامل چه مواردی میشود؟', a='پنج سال پشتیبانی فنی تأسیسات مکانیکی و برقی، بازدید دورهای سالانه و تضمین اجرای نما و عایقکاری.'),
|
||||
dict(q='پروژهها در چه شهرهایی اجرا میشوند؟', a='در حال حاضر تهران، اصفهان و سواحل شمالی کشور مناطق اصلی فعالیت ما هستند و پروژهای نیز در جزیره کیش در دست ساخت است.'),
|
||||
]
|
||||
|
||||
|
||||
def seed():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
# برند (تک رکورد)
|
||||
if not db.get(models.Brand, 1):
|
||||
db.add(models.Brand(id=1, **BRAND))
|
||||
print("✓ برند اضافه شد")
|
||||
|
||||
def add_all(model, rows, unique_field=None):
|
||||
added = 0
|
||||
for i, row in enumerate(rows):
|
||||
if unique_field:
|
||||
exists = db.query(model).filter(
|
||||
getattr(model, unique_field) == row[unique_field]
|
||||
).first()
|
||||
if exists:
|
||||
continue
|
||||
db.add(model(order=i, **row))
|
||||
added += 1
|
||||
print(f"✓ {added} رکورد به {model.__tablename__} اضافه شد")
|
||||
|
||||
add_all(models.Service, SERVICES)
|
||||
add_all(models.Project, PROJECTS, unique_field='slug')
|
||||
add_all(models.Stat, STATS)
|
||||
add_all(models.TimelineItem, TIMELINE)
|
||||
add_all(models.WhyUsItem, WHY)
|
||||
add_all(models.Testimonial, TESTIMONIALS)
|
||||
add_all(models.TeamMember, TEAM)
|
||||
add_all(models.Article, ARTICLES, unique_field='slug')
|
||||
add_all(models.Faq, FAQS)
|
||||
|
||||
db.commit()
|
||||
print("\n✅ seed کامل شد.")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
seed()
|
||||
Reference in New Issue
Block a user