Files
igny8/old-docs/igny8-app/TAXONOMY/TAXONOMY-RELATIONSHIP-DIAGRAM.md
2025-12-07 16:49:30 +05:00

15 KiB

Content Taxonomy Relationship Diagram

Current Architecture (Simplified)

┌─────────────────────────────────────────────────────────────────────┐
│                         IGNY8 Content System                         │
└─────────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────────┐
│                    Multi-Tenant Hierarchy                             │
│                                                                       │
│   Account ──┬── Site ──┬── Sector ──┬── Keywords                     │
│             │          │             ├── Clusters                     │
│             │          │             ├── Ideas                        │
│             │          │             ├── Tasks                        │
│             │          │             ├── Content                      │
│             │          │             └── ContentTaxonomy              │
│             │          └── Sector 2                                   │
│             └── Site 2                                                │
└──────────────────────────────────────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────┐
│              Planner → Writer → Publisher Workflow                    │
│                                                                       │
│  Phase 1-3: PLANNER                                                   │
│  ┌──────────┐     ┌──────────┐     ┌──────────┐                     │
│  │ Keywords │ ──> │ Clusters │ ──> │  Ideas   │                     │
│  └──────────┘     └──────────┘     └──────────┘                     │
│       │                 │                 │                           │
│       │                 │                 │                           │
│  Phase 4: WRITER                                                      │
│       │                 │                 │                           │
│       └─────────────────┴─────────────────┘                          │
│                         │                                             │
│                         v                                             │
│                  ┌──────────┐     ┌──────────┐                       │
│                  │  Tasks   │ ──> │ Content  │                       │
│                  └──────────┘     └──────────┘                       │
│                                         │                             │
│                                         │                             │
│  Phase 5: PUBLISHER                     │                             │
│                                         v                             │
│                                  ┌─────────────┐                     │
│                                  │  WordPress  │                     │
│                                  │   Shopify   │                     │
│                                  │    Sites    │                     │
│                                  └─────────────┘                     │
└──────────────────────────────────────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────┐
│            Content ↔ Taxonomy Relationship (Many-to-Many)             │
└──────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────┐
│          Content Model           │
│─────────────────────────────────│
│ PK: id                           │
│ FK: site_id ──────┐              │
│ FK: sector_id     │              │
│ FK: cluster_id    │              │
│                   │              │
│ title             │              │
│ content_html      │              │
│ word_count        │              │
│ meta_title        │              │
│ meta_description  │              │
│                   │              │
│ content_type      │              │
│ content_structure │              │
│                   │              │
│ external_id       │              │
│ external_url      │              │
│ sync_status       │              │
│                   │              │
│ source            │              │
│ status            │              │
└───────────┬───────┘              │
            │                      │
            │ Many-to-Many         │
            │ (via ContentTaxonomyRelation)
            │                      │
            v                      │
┌─────────────────────────────────┐│
│  ContentTaxonomyRelation Model   ││
│─────────────────────────────────││
│ PK: id                           ││
│ FK: content_id ──────────────────┘
│ FK: taxonomy_id ────────────┐
│                             │
│ created_at                  │
│ updated_at                  │
│                             │
│ UNIQUE(content, taxonomy)   │
└─────────────────────────────┘
                              │
                              │
                              v
            ┌─────────────────────────────────┐
            │    ContentTaxonomy Model        │
            │─────────────────────────────────│
            │ PK: id                          │
            │ FK: site_id ─────┐              │
            │ FK: sector_id    │              │
            │                  │              │
            │ name             │              │
            │ slug             │              │
            │ taxonomy_type    │ ◄─── "category" or "tag"
            │ description      │              │
            │ count            │              │
            │                  │              │
            │ WordPress Sync:  │              │
            │ external_taxonomy│ ◄─── "category", "post_tag"
            │ external_id      │ ◄─── WordPress term_id
            │                  │              │
            │ metadata (JSON)  │              │
            └──────────────────┘              │
                              │              │
                              │              │
            UNIQUE(site, slug, taxonomy_type)│
            UNIQUE(site, external_id, external_taxonomy)
                              │              │
                              └──────────────┘


┌──────────────────────────────────────────────────────────────────────┐
│                    Usage Example                                      │
└──────────────────────────────────────────────────────────────────────┘

# Get all categories for a content piece
categories = content.taxonomy_terms.filter(taxonomy_type='category')

# Get all tags for a content piece  
tags = content.taxonomy_terms.filter(taxonomy_type='tag')

# Add a category to content
tech_category = ContentTaxonomy.objects.get(name='Technology')
content.taxonomy_terms.add(tech_category)

# Get all content with a specific tag
tutorial_tag = ContentTaxonomy.objects.get(name='Tutorial')
contents = tutorial_tag.contents.all()

# WordPress publishing (automatic)
wp_categories = [term.name for term in content.taxonomy_terms.filter(taxonomy_type='category')]
wp_tags = [term.name for term in content.taxonomy_terms.filter(taxonomy_type='tag')]


┌──────────────────────────────────────────────────────────────────────┐
│              WordPress Integration (Bidirectional Sync)               │
└──────────────────────────────────────────────────────────────────────┘

IGNY8 → WordPress:
─────────────────
1. Content created in IGNY8
2. Categories/tags assigned via taxonomy_terms M2M
3. Publishing task created
4. wordpress_publishing.py extracts:
   - categories = content.taxonomy_terms.filter(taxonomy_type='category')
   - tags = content.taxonomy_terms.filter(taxonomy_type='tag')
5. REST API creates WordPress post with terms
6. external_id saved back to Content model
7. Log: [5-homeg8.com] [POST] Published: "Article Title" (ID: 123)

WordPress → IGNY8:
─────────────────
1. WordPress plugin detects post update
2. REST API sends post data + terms to IGNY8
3. Content updated/created with external_id
4. ContentTaxonomy created/updated with external_id
5. ContentTaxonomyRelation created linking them
6. Log: [5-homeg8.com] [SYNC] Imported: "Article Title"


┌──────────────────────────────────────────────────────────────────────┐
│                  Database Tables Summary                              │
└──────────────────────────────────────────────────────────────────────┘

igny8_content
├─ id (PK)
├─ site_id (FK → sites)
├─ sector_id (FK → sectors)  
├─ cluster_id (FK → clusters)
├─ title, content_html, word_count
├─ meta_title, meta_description, keywords
├─ content_type, content_structure
├─ external_id, external_url, sync_status
└─ source, status, timestamps

igny8_content_taxonomy_relations (Through Table)
├─ id (PK)
├─ content_id (FK → igny8_content)
├─ taxonomy_id (FK → igny8_content_taxonomy_terms)
└─ timestamps
    UNIQUE(content_id, taxonomy_id)

igny8_content_taxonomy_terms
├─ id (PK)
├─ site_id (FK → sites)
├─ sector_id (FK → sectors)
├─ name, slug
├─ taxonomy_type ('category' | 'tag')
├─ description, count
├─ external_taxonomy ('category' | 'post_tag')
├─ external_id (WordPress term_id)
├─ metadata (JSON)
└─ timestamps
    UNIQUE(site_id, slug, taxonomy_type)
    UNIQUE(site_id, external_id, external_taxonomy)


┌──────────────────────────────────────────────────────────────────────┐
│                 Before vs After Comparison                            │
└──────────────────────────────────────────────────────────────────────┘

BEFORE (Complex - with SiteBlueprint):
────────────────────────────────────
SiteBlueprint ──┬── SiteBlueprintCluster ──> Clusters
                ├── SiteBlueprintTaxonomy ──> ContentTaxonomy
                └── PageBlueprint ──> Content

Content ──> ContentTaxonomyMap ──> ContentTaxonomy
           (separate table with FK)

PublishingRecord ──┬── content_id
                   └── site_blueprint_id

DeploymentRecord ──┬── content_id  
                   └── site_blueprint_id


AFTER (Simple - SiteBlueprint Removed):
──────────────────────────────────────
Keywords ──> Clusters ──> Ideas ──> Tasks ──> Content

Content ↔ ContentTaxonomy
         (M2M via ContentTaxonomyRelation)

PublishingRecord ──> content_id

DeploymentRecord ──> content_id


┌──────────────────────────────────────────────────────────────────────┐
│                      Key Benefits                                     │
└──────────────────────────────────────────────────────────────────────┘

✅ Simpler architecture - removed 4 models
✅ Direct M2M relationship - easier to query
✅ Less database joins - better performance  
✅ Clear taxonomy model in Django admin
✅ WordPress sync unchanged - still works perfectly
✅ Planner-Writer-Publisher workflow intact
✅ Multi-tenant security maintained
✅ No circular dependencies
✅ Clean codebase - no legacy blueprint code