refactor stage 1

This commit is contained in:
alorig
2025-11-19 19:33:26 +05:00
parent 142077ce85
commit 8b7ed02759
11 changed files with 994 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
#
# Generated by Django 5.2.8 on 2025-11-19
from django.db import migrations, models
import django.db.models.deletion
def default_json():
return {}
def default_list():
return []
class Migration(migrations.Migration):
dependencies = [
('site_building', '0002_sitebuilder_metadata'),
('planner', '0007_merge_20251109_2138'),
]
operations = [
migrations.AddField(
model_name='clusters',
name='context_type',
field=models.CharField(choices=[('topic', 'Topic Cluster'), ('attribute', 'Attribute Cluster'), ('service_line', 'Service Line')], default='topic', help_text='Primary dimension for this cluster (topic, attribute, service line)', max_length=50),
),
migrations.AddField(
model_name='clusters',
name='dimension_meta',
field=models.JSONField(blank=True, default=default_json, help_text='Extended metadata (taxonomy hints, attribute suggestions, coverage targets)'),
),
migrations.AddField(
model_name='contentideas',
name='cluster_role',
field=models.CharField(choices=[('hub', 'Hub Page'), ('supporting', 'Supporting Page'), ('attribute', 'Attribute Page')], default='hub', help_text='Role within the cluster-driven sitemap', max_length=50),
),
migrations.AddField(
model_name='contentideas',
name='site_entity_type',
field=models.CharField(choices=[('page', 'Site Page'), ('blog_post', 'Blog Post'), ('product', 'Product'), ('service', 'Service'), ('taxonomy', 'Taxonomy Page')], default='page', help_text='Target entity type when promoting idea into tasks/pages', max_length=50),
),
migrations.AddField(
model_name='contentideas',
name='taxonomy',
field=models.ForeignKey(blank=True, help_text='Optional taxonomy association when derived from blueprint planning', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='content_ideas', to='site_building.siteblueprinttaxonomy'),
),
migrations.AddField(
model_name='keywords',
name='attribute_values',
field=models.JSONField(blank=True, default=default_list, help_text='Optional attribute metadata (e.g., product specs, service modifiers)'),
),
migrations.AddIndex(
model_name='clusters',
index=models.Index(fields=['context_type'], name='planner_cl_context__2ed54f_idx'),
),
migrations.AddIndex(
model_name='contentideas',
index=models.Index(fields=['site_entity_type'], name='planner_co_site_ent_d3183c_idx'),
),
migrations.AddIndex(
model_name='contentideas',
index=models.Index(fields=['cluster_role'], name='planner_co_cluster__f97a65_idx'),
),
]

View File

@@ -0,0 +1,121 @@
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('site_building', '0003_workflow_and_taxonomies'),
('planner', '0008_stage1_site_builder_fields'),
('writer', '0011_add_universal_content_types'),
]
operations = [
migrations.CreateModel(
name='ContentClusterMap',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('role', models.CharField(choices=[('hub', 'Hub Page'), ('supporting', 'Supporting Page'), ('attribute', 'Attribute Page')], default='hub', max_length=50)),
('source', models.CharField(choices=[('blueprint', 'Blueprint'), ('manual', 'Manual'), ('import', 'Import')], default='blueprint', max_length=50)),
('metadata', models.JSONField(blank=True, default=dict)),
('account', models.ForeignKey(db_column='tenant_id', on_delete=django.db.models.deletion.CASCADE, related_name='contentclustermap_set', to='igny8_core_auth.account')),
('cluster', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_mappings', to='planner.clusters')),
('content', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cluster_mappings', to='writer.content')),
('sector', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contentclustermap_set', to='igny8_core_auth.sector')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contentclustermap_set', to='igny8_core_auth.site')),
('task', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cluster_mappings', to='writer.tasks')),
],
options={
'verbose_name': 'Content Cluster Map',
'verbose_name_plural': 'Content Cluster Maps',
'db_table': 'igny8_content_cluster_map',
'ordering': ['-created_at'],
'unique_together': {('content', 'cluster', 'role')},
},
),
migrations.CreateModel(
name='ContentTaxonomyMap',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('source', models.CharField(choices=[('blueprint', 'Blueprint'), ('manual', 'Manual'), ('import', 'Import')], default='blueprint', max_length=50)),
('metadata', models.JSONField(blank=True, default=dict)),
('account', models.ForeignKey(db_column='tenant_id', on_delete=django.db.models.deletion.CASCADE, related_name='contenttaxonomymap_set', to='igny8_core_auth.account')),
('content', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='taxonomy_mappings', to='writer.content')),
('sector', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contenttaxonomymap_set', to='igny8_core_auth.sector')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contenttaxonomymap_set', to='igny8_core_auth.site')),
('taxonomy', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_mappings', to='site_building.siteblueprinttaxonomy')),
('task', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='taxonomy_mappings', to='writer.tasks')),
],
options={
'verbose_name': 'Content Taxonomy Map',
'verbose_name_plural': 'Content Taxonomy Maps',
'db_table': 'igny8_content_taxonomy_map',
'ordering': ['-created_at'],
'unique_together': {('content', 'taxonomy')},
},
),
migrations.CreateModel(
name='ContentAttributeMap',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=120)),
('value', models.CharField(blank=True, max_length=255, null=True)),
('source', models.CharField(choices=[('blueprint', 'Blueprint'), ('manual', 'Manual'), ('import', 'Import')], default='blueprint', max_length=50)),
('metadata', models.JSONField(blank=True, default=dict)),
('account', models.ForeignKey(db_column='tenant_id', on_delete=django.db.models.deletion.CASCADE, related_name='contentattributemap_set', to='igny8_core_auth.account')),
('content', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attribute_mappings', to='writer.content')),
('sector', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contentattributemap_set', to='igny8_core_auth.sector')),
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contentattributemap_set', to='igny8_core_auth.site')),
('task', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='attribute_mappings', to='writer.tasks')),
],
options={
'verbose_name': 'Content Attribute Map',
'verbose_name_plural': 'Content Attribute Maps',
'db_table': 'igny8_content_attribute_map',
'ordering': ['-created_at'],
},
),
migrations.AddIndex(
model_name='contentclustermap',
index=models.Index(fields=['cluster', 'role'], name='writer_con_cluster__d06bd6_idx'),
),
migrations.AddIndex(
model_name='contentclustermap',
index=models.Index(fields=['content', 'role'], name='writer_con_content__bb02dd_idx'),
),
migrations.AddIndex(
model_name='contentclustermap',
index=models.Index(fields=['task', 'role'], name='writer_con_task__role_828ce1_idx'),
),
migrations.AddIndex(
model_name='contenttaxonomymap',
index=models.Index(fields=['taxonomy'], name='writer_con_taxonomy_d55410_idx'),
),
migrations.AddIndex(
model_name='contenttaxonomymap',
index=models.Index(fields=['content', 'taxonomy'], name='writer_con_content__0af6a6_idx'),
),
migrations.AddIndex(
model_name='contenttaxonomymap',
index=models.Index(fields=['task', 'taxonomy'], name='writer_con_task__taxon_e3bdad_idx'),
),
migrations.AddIndex(
model_name='contentattributemap',
index=models.Index(fields=['name'], name='writer_con_name_a9671a_idx'),
),
migrations.AddIndex(
model_name='contentattributemap',
index=models.Index(fields=['content', 'name'], name='writer_con_content__34a91e_idx'),
),
migrations.AddIndex(
model_name='contentattributemap',
index=models.Index(fields=['task', 'name'], name='writer_con_task__name_fa4a4e_idx'),
),
]