"""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)]