Files
igny8/backend/igny8_core/business/publishing/models.py
IGNY8 VPS (Salman) 9facd12082 Update ForeignKey reference in PublishingRecord model and enhance integration app configuration
- Changed ForeignKey reference from 'content.Content' to 'writer.Content' in PublishingRecord model to ensure correct app_label usage.
- Updated IntegrationConfig to use a unique label 'integration_module' to avoid conflicts.
- Added 'lucide-react' dependency to package.json and package-lock.json for improved icon support in the frontend.
- Enhanced Vite configuration to optimize dependency pre-bundling for core React dependencies.
- Added Phase 5 Migration Final Verification and Verification Report documents for comprehensive migration tracking.
2025-11-18 00:54:01 +00:00

160 lines
4.5 KiB
Python

"""
Publishing Models
Phase 5: Sites Renderer & Publishing
"""
from django.db import models
from igny8_core.auth.models import SiteSectorBaseModel
class PublishingRecord(SiteSectorBaseModel):
"""
Track content publishing to various destinations.
"""
STATUS_CHOICES = [
('pending', 'Pending'),
('publishing', 'Publishing'),
('published', 'Published'),
('failed', 'Failed'),
]
# Content or SiteBlueprint reference (one must be set)
content = models.ForeignKey(
'writer.Content',
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='publishing_records',
help_text="Content being published (if publishing content)"
)
site_blueprint = models.ForeignKey(
'site_building.SiteBlueprint',
on_delete=models.CASCADE,
null=True,
blank=True,
related_name='publishing_records',
help_text="Site blueprint being published (if publishing site)"
)
# Destination information
destination = models.CharField(
max_length=50,
db_index=True,
help_text="Destination platform: 'wordpress', 'sites', 'shopify'"
)
destination_id = models.CharField(
max_length=255,
blank=True,
null=True,
help_text="External ID in destination platform"
)
destination_url = models.URLField(
blank=True,
null=True,
help_text="URL of published content/site"
)
# Status tracking
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='pending',
db_index=True
)
published_at = models.DateTimeField(null=True, blank=True)
error_message = models.TextField(blank=True, null=True)
# Metadata
metadata = models.JSONField(
default=dict,
help_text="Platform-specific metadata"
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
app_label = 'publishing'
db_table = 'igny8_publishing_records'
ordering = ['-created_at']
indexes = [
models.Index(fields=['destination', 'status']),
models.Index(fields=['content', 'destination']),
models.Index(fields=['site_blueprint', 'destination']),
models.Index(fields=['account', 'status']),
]
def __str__(self):
target = self.content or self.site_blueprint
return f"{target}{self.destination} ({self.get_status_display()})"
class DeploymentRecord(SiteSectorBaseModel):
"""
Track site deployments to Sites renderer.
"""
STATUS_CHOICES = [
('pending', 'Pending'),
('deploying', 'Deploying'),
('deployed', 'Deployed'),
('failed', 'Failed'),
('rolled_back', 'Rolled Back'),
]
site_blueprint = models.ForeignKey(
'site_building.SiteBlueprint',
on_delete=models.CASCADE,
related_name='deployments',
help_text="Site blueprint being deployed"
)
# Version tracking
version = models.IntegerField(
help_text="Blueprint version being deployed"
)
deployed_version = models.IntegerField(
null=True,
blank=True,
help_text="Currently deployed version (after successful deployment)"
)
# Status tracking
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='pending',
db_index=True
)
deployed_at = models.DateTimeField(null=True, blank=True)
deployment_url = models.URLField(
blank=True,
null=True,
help_text="Public URL of deployed site"
)
error_message = models.TextField(blank=True, null=True)
# Metadata
metadata = models.JSONField(
default=dict,
help_text="Deployment metadata (build info, file paths, etc.)"
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
app_label = 'publishing'
db_table = 'igny8_deployment_records'
ordering = ['-created_at']
indexes = [
models.Index(fields=['site_blueprint', 'status']),
models.Index(fields=['site_blueprint', 'version']),
models.Index(fields=['status']),
models.Index(fields=['account', 'status']),
]
def __str__(self):
return f"{self.site_blueprint.name} v{self.version} ({self.get_status_display()})"