Files
guilan-ace-backend/apps/content/migrations/0005_seed_current_website_copy.py

137 lines
12 KiB
Python

"""Copy current static website copy into untouched direct-edit content records.
Sources: frontend src/views/{Home,AboutUs,Events,Blog}.tsx and
src/app/{page,about/page,events/page,blog/page,layout}.tsx as of 2026-09-27.
The migration deliberately leaves existing CMS edits and uploaded images alone.
"""
from django.db import migrations
HOME = {
"title": "انجمن علمی کامپیوتر دانشگاه گیلان",
"intro": "با ما همراه شوید و در دنیای مهندسی/علوم کامپیوتر و فناوری پیشرفت کنید. رویدادها، محتوای آموزشی و جامعه‌ای پویا برای رشد شما فراهم است.",
"hero_heading": "انجمن علمی کامپیوتر دانشگاه گیلان",
"hero_body": "با ما همراه شوید و در دنیای مهندسی/علوم کامپیوتر و فناوری پیشرفت کنید. رویدادها، محتوای آموزشی و جامعه‌ای پویا برای رشد شما فراهم است.",
"hero_action_label": "مشاهده رویدادها",
"featured_events_heading": "رویدادهای تخصصی",
"featured_events_intro": "با شرکت در رویدادهای ما، دانش و مهارت‌های خود را در کنار اساتید و متخصصان ارتقا دهید.",
"featured_events_link_label": "مشاهده رویدادها",
"featured_posts_heading": "مقالات آموزشی",
"featured_posts_intro": "تازه‌ترین مقالات تخصصی در حوزه‌های مختلف علوم کامپیوتر برای یادگیری و توسعه فردی.",
"featured_posts_link_label": "خواندن مقالات",
"participation_heading": "آماده عضویت هستید؟",
"participation_body": "همین حالا به جمع ما بپیوندید و از برنامه‌ها و فرصت‌های یادگیری انجمن علمی کامپیوتر دانشگاه گیلان استفاده کنید.",
"participation_action_label": "ثبت‌نام کنید",
"seo_title": "انجمن علمی کامپیوتر دانشگاه گیلان",
"seo_description": "با ما همراه شوید و در دنیای مهندسی و علوم کامپیوتر پیشرفت کنید. رویدادها، محتوای آموزشی و جامعه‌ای پویا برای رشد شما فراهم است.",
}
ABOUT = {
"title": "انجمن‌های علمی کامپیوتر گیلان",
"intro": "پیوند دانشگاه و صنعت با برگزاری رویدادها، کارگاه‌ها و نشست‌های تخصصی — با محوریت رشد مهارت‌های فنی و مسیرهای شغلی.",
"identity_heading": "انجمن‌های علمی کامپیوتر گیلان",
"identity_body": "پیوند دانشگاه و صنعت با برگزاری رویدادها، کارگاه‌ها و نشست‌های تخصصی — با محوریت رشد مهارت‌های فنی و مسیرهای شغلی.",
"mission_heading": "ماموریت ما",
"mission_body": "توانمندسازی دانشجویان با مهارت‌های موردنیاز صنعت، ایجاد شبکه‌های حرفه‌ای و فراهم‌کردن مسیرهای یادگیری پروژه‌محور؛ از معرفی نقش‌ها و مسیرهای شغلی تا تمرین مهارت‌های نرم و فنی.",
"values_heading": "ارزش‌های ما",
"values_body": "یادگیری پیوسته و اشتراک دانش\nکیفیت، شفافیت و مسئولیت‌پذیری\nفرصت برابر برای مشارکت\nارتباط مؤثر با صنعت و جامعه",
"committees_heading": "کمیته‌ها و گروه‌های کاری",
"affiliations_heading": "انجمن‌ها",
"affiliations_body": "اطلاعات انجمن‌های زیرمجموعه/همکار",
"faq_heading": "پرسش‌های متداول",
"contact_heading": "راه‌های ارتباطی",
"seo_title": "درباره ما | انجمن علمی کامپیوتر شرق گیلان",
"seo_description": "آشنایی با تاریخچه، مأموریت‌ها و دستاوردهای انجمن علمی کامپیوتر شرق گیلان و راه‌های مشارکت دانشجویان در برنامه‌های انجمن.",
}
EVENTS = {
"title": "رویدادها",
"intro": "رویدادهای جاری و گذشته انجمن علمی کامپیوتر شرق گیلان، شامل کارگاه‌ها، مسابقات و برنامه‌های آموزشی.",
"seo_title": "رویدادها",
"seo_description": "رویدادهای جاری و گذشته انجمن علمی کامپیوتر شرق گیلان، شامل کارگاه‌ها، مسابقات و برنامه‌های آموزشی.",
}
BLOG = {
"title": "بلاگ",
"intro": "نوشته‌های آموزشی، تجربه‌های دانشجویی و یادداشت‌های تخصصی اعضای انجمن علمی.",
"seo_title": "وبلاگ",
"seo_description": "مقالات، نوشته‌ها و محتوای آموزشی انجمن علمی کامپیوتر شرق گیلان.",
}
SITE = {
"official_name": "انجمن علمی مهندسی کامپیوتر دانشگاه گیلان (دانشکده‌ی فنی و مهندسی شرق گیلان)",
"short_name": "انجمن علمی مهندسی کامپیوتر",
"faculty_subline": "دانشکده‌ی فنی و مهندسی شرق گیلان",
"description": "ترویج علم کامپیوتر، برگزاری رویدادهای تخصصی، تقویت شبکه‌ی دانشجویی و پیوند با صنعت.",
"nav_home": "خانه",
"nav_about": "درباره ما",
"nav_events": "رویدادها",
"nav_blog": "بلاگ",
"email": "eastguilanceassociation@gmail.com",
"phone": "۰۱۳-۴۲۶۸۸۴۴۷",
"telegram_url": "https://t.me/guilancea",
"instagram_url": "https://instagram.com/guilance.ir",
"website_url": "https://east-guilan-ce.ir",
"address": "گیلان، رودسر، واجارگاه، دانشکده‌ی فنی و مهندسی شرق گیلان\nکدپستی: ۴۴۹۱۸۹۸۵۶۶",
"footer_copy": "ترویج علم کامپیوتر، برگزاری رویدادهای تخصصی، تقویت شبکه‌ی دانشجویی و پیوند با صنعت.",
"seo_title": "انجمن علمی کامپیوتر شرق گیلان",
"seo_description": "انجمن علمی کامپیوتر شرق گیلان، برگزارکننده رویدادها، کارگاه‌ها و محتوای آموزشی برای دانشجویان و علاقه‌مندان فناوری.",
}
# Each pair is (kind, title, text). These are the visible About page items.
ABOUT_ITEMS = (
("committees", "کمیته آموزش", "برنامه‌ریزی و اجرای دوره‌ها و کارگاه‌های مهارتی، هماهنگی با مدرسین و طراحی مسیرهای یادگیری."),
("committees", "کمیته صنعت و اشتغال", "تعامل با شرکت‌ها، دعوت از متخصصان صنعت، و شبکه‌سازی برای فرصت‌های کارآموزی و استخدام."),
("committees", "کمیته محتوای دیجیتال", "تولید محتوای آموزشی، خبرنامه، مدیریت شبکه‌های اجتماعی و پوشش رسانه‌ای رویدادها."),
("affiliations", "انجمن علمی مهندسی کامپیوتر دانشکده‌ی فنی شرق", "دانشگاه گیلان، رودسر؛ تأسیس: ۱۳۹۲. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصت‌های شغلی و پژوهشی. حوزه‌ها: مهندسی نرم‌افزار، هوش مصنوعی و داده، طراحی محصول، DevOps/امنیت."),
("affiliations", "انجمن علمی مهندسی کامپیوتر دانشکده‌ی فنی", "دانشگاه گیلان، رشت؛ تأسیس: ۱۳۵۳. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصت‌های شغلی و پژوهشی. حوزه‌ها: مهندسی نرم‌افزار، هوش مصنوعی و داده، DevOps."),
("affiliations", "انجمن علمی علوم کامپیوتر دانشکده‌ی علوم‌پایه", "دانشگاه گیلان، رشت؛ تأسیس: ۱۳۵۳. برگزاری رویدادهای آموزشی و صنعتی، منتورینگ دانشجویی، و اتصال دانشجویان به فرصت‌های شغلی و پژوهشی. حوزه‌ها: امنیت، سیستم‌عامل، سخت‌افزار."),
("faq", "چطور در رویدادها شرکت کنم؟", "برای ثبت‌نام در رویدادها ابتدا باید حساب‌کاربری با کددانشجویی خود ایجاد کنید و سپس از طریق صفحه‌ی ثبت‌نام در رویداد موردنظرتان شرکت کنید :)"),
("faq", "آیا امکان همکاری انجمن‌ها/شرکت‌ها هم وجود دارد؟", "بله، ما همیشه آماده‌ی همکاری با سازمان‌ها و انجمن‌های مختلف دانشگاه‌ها جهت توانمندسازی دانشجویان با مهارت‌های موردنیاز صنعت و ایجاد شبکه‌های حرفه‌ای هستیم."),
("faq", "برای سخنرانی/منتورینگ به چه چیزهایی نیاز است؟", "رزومه کوتاه، موضوع پیشنهادی و زمان‌های دسترس‌پذیرتان را ارسال کنید تا هماهنگ کنیم."),
)
def seed_if_untouched(record, values, marker_fields, db):
if any(getattr(record, name) for name in marker_fields):
return False
for name, value in values.items():
setattr(record, name, value)
record.save(using=db)
return True
def seed_current_copy(apps, schema_editor):
db = schema_editor.connection.alias
SiteContent = apps.get_model("content", "SiteContent")
HomeContent = apps.get_model("content", "HomeContent")
AboutContent = apps.get_model("content", "AboutContent")
AboutItem = apps.get_model("content", "AboutItem")
ListingContent = apps.get_model("content", "ListingContent")
site, _ = SiteContent.objects.using(db).get_or_create(pk=1)
seed_if_untouched(site, SITE, ("official_name", "short_name", "email", "seo_title"), db)
home, _ = HomeContent.objects.using(db).get_or_create(pk=1)
seed_if_untouched(home, HOME, ("title", "hero_heading", "seo_title"), db)
about, _ = AboutContent.objects.using(db).get_or_create(pk=1)
seeded_about = seed_if_untouched(about, ABOUT, ("title", "identity_heading", "seo_title"), db)
if seeded_about and not AboutItem.objects.using(db).filter(about_id=1).exists():
positions = {}
for kind, title, item_text in ABOUT_ITEMS:
position = positions.get(kind, 0)
AboutItem.objects.using(db).create(about_id=1, kind=kind, title=title, text=item_text, position=position)
positions[kind] = position + 1
for slug, values in (("events", EVENTS), ("blog", BLOG)):
listing, _ = ListingContent.objects.using(db).get_or_create(slug=slug)
seed_if_untouched(listing, values, ("title", "intro", "seo_title"), db)
class Migration(migrations.Migration):
dependencies = [("content", "0004_direct_edit_content")]
operations = [migrations.RunPython(seed_current_copy, migrations.RunPython.noop)]