169 lines
10 KiB
Python
169 lines
10 KiB
Python
# Generated by Django 5.2.5 on 2026-09-27 05:53
|
|
|
|
import apps.content.models
|
|
import apps.content.validators
|
|
import django.core.validators
|
|
import django.db.models.deletion
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='EditorialPage',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('slug', models.CharField(max_length=20, unique=True)),
|
|
('page_kind', models.CharField(choices=[('sections', 'Sections'), ('listing_intro', 'Listing intro')], max_length=20)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='MediaAsset',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('file', models.ImageField(upload_to=apps.content.models.media_path)),
|
|
('width', models.PositiveIntegerField(default=0)),
|
|
('height', models.PositiveIntegerField(default=0)),
|
|
('bytes', models.PositiveIntegerField(default=0)),
|
|
('alt', models.CharField(max_length=180)),
|
|
('source', models.CharField(max_length=300)),
|
|
('license', models.CharField(max_length=200)),
|
|
('approved', models.BooleanField(default=False)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='SiteIdentity',
|
|
fields=[
|
|
('id', models.PositiveSmallIntegerField(default=1, editable=False, primary_key=True, serialize=False)),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='PageRevision',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('number', models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1)])),
|
|
('status', models.CharField(choices=[('draft', 'Draft'), ('published', 'Published')], default='draft', max_length=10)),
|
|
('title', models.CharField(max_length=180)),
|
|
('intro', models.CharField(blank=True, max_length=600)),
|
|
('seo_title', models.CharField(max_length=120)),
|
|
('seo_description', models.CharField(max_length=300)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('published_at', models.DateTimeField(blank=True, null=True)),
|
|
('source_seed_key', models.CharField(blank=True, max_length=120)),
|
|
('source_seed_version', models.CharField(blank=True, max_length=40)),
|
|
('content_checksum', models.CharField(blank=True, max_length=64)),
|
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='content_page_drafts', to=settings.AUTH_USER_MODEL)),
|
|
('page', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='revisions', to='content.editorialpage')),
|
|
('published_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='content_page_publications', to=settings.AUTH_USER_MODEL)),
|
|
('seo_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='page_og_images', to='content.mediaasset')),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='editorialpage',
|
|
name='published_revision',
|
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='published_for', to='content.pagerevision'),
|
|
),
|
|
migrations.CreateModel(
|
|
name='PageSection',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('key', models.CharField(max_length=30)),
|
|
('section_type', models.CharField(max_length=30)),
|
|
('position', models.PositiveSmallIntegerField()),
|
|
('visible', models.BooleanField(default=True)),
|
|
('heading', models.CharField(max_length=120)),
|
|
('body', models.TextField(blank=True)),
|
|
('intro', models.CharField(blank=True, max_length=300)),
|
|
('all_link_label', models.CharField(blank=True, max_length=40)),
|
|
('primary_action', models.JSONField(blank=True, null=True)),
|
|
('secondary_action', models.JSONField(blank=True, null=True)),
|
|
('entries', models.JSONField(blank=True, default=list)),
|
|
('image_alt', models.CharField(blank=True, max_length=180)),
|
|
('image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sections', to='content.mediaasset')),
|
|
('revision', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sections', to='content.pagerevision')),
|
|
],
|
|
options={
|
|
'ordering': ['position'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='PublicationAudit',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('from_revision', models.PositiveIntegerField(blank=True, null=True)),
|
|
('to_revision', models.PositiveIntegerField()),
|
|
('operation', models.CharField(choices=[('create_draft', 'Create draft'), ('update_draft', 'Update draft'), ('publish', 'Publish'), ('restore', 'Restore')], max_length=20)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('actor', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
|
('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='content.editorialpage')),
|
|
('site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='content.siteidentity')),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name='SiteRevision',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('number', models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1)])),
|
|
('status', models.CharField(choices=[('draft', 'Draft'), ('published', 'Published')], default='draft', max_length=10)),
|
|
('official_name', models.CharField(max_length=180)),
|
|
('short_name', models.CharField(max_length=80)),
|
|
('faculty_subline', models.CharField(blank=True, max_length=140)),
|
|
('description', models.CharField(blank=True, max_length=500)),
|
|
('logo_alt', models.CharField(blank=True, max_length=180)),
|
|
('navigation', models.JSONField(blank=True, default=list, validators=[apps.content.validators.navigation])),
|
|
('contacts', models.JSONField(blank=True, default=list, validators=[apps.content.validators.contacts])),
|
|
('footer_copy', models.CharField(blank=True, max_length=300)),
|
|
('seo_title', models.CharField(blank=True, max_length=120)),
|
|
('seo_description', models.CharField(blank=True, max_length=300)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('published_at', models.DateTimeField(blank=True, null=True)),
|
|
('source_seed_key', models.CharField(blank=True, max_length=120)),
|
|
('source_seed_version', models.CharField(blank=True, max_length=40)),
|
|
('content_checksum', models.CharField(blank=True, max_length=64)),
|
|
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='content_site_drafts', to=settings.AUTH_USER_MODEL)),
|
|
('logo', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='site_logos', to='content.mediaasset')),
|
|
('published_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='content_site_publications', to=settings.AUTH_USER_MODEL)),
|
|
('seo_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='site_og_images', to='content.mediaasset')),
|
|
('site', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='revisions', to='content.siteidentity')),
|
|
],
|
|
),
|
|
migrations.AddField(
|
|
model_name='siteidentity',
|
|
name='published_revision',
|
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='published_for', to='content.siterevision'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='pagerevision',
|
|
constraint=models.UniqueConstraint(fields=('page', 'number'), name='content_page_revision_number'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='pagesection',
|
|
constraint=models.UniqueConstraint(fields=('revision', 'key'), name='content_section_key'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='pagesection',
|
|
constraint=models.UniqueConstraint(fields=('revision', 'position'), name='content_section_position'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='publicationaudit',
|
|
constraint=models.CheckConstraint(condition=models.Q(models.Q(('page__isnull', True), ('site__isnull', False)), models.Q(('page__isnull', False), ('site__isnull', True)), _connector='OR'), name='content_audit_one_target'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='siterevision',
|
|
constraint=models.UniqueConstraint(fields=('site', 'number'), name='content_site_revision_number'),
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name='siteidentity',
|
|
constraint=models.CheckConstraint(condition=models.Q(('id', 1)), name='content_single_site'),
|
|
),
|
|
]
|