1269 lines
38 KiB
Markdown
1269 lines
38 KiB
Markdown
# IGNY8 Backend Implementation Reference
|
|
|
|
**Last Updated:** 2025-01-XX (Added 6 missing modules: Linker, Optimizer, Publisher, Site Builder, Automation, Integration)
|
|
**Purpose:** Complete backend implementation reference covering project structure, models, ViewSets, serializers, Celery tasks, API endpoints, base classes, middleware, and utilities.
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Backend Overview](#backend-overview)
|
|
2. [Tech Stack](#tech-stack)
|
|
3. [Project Structure](#project-structure)
|
|
4. [Models](#models)
|
|
5. [ViewSets](#viewsets)
|
|
6. [Serializers](#serializers)
|
|
7. [Celery Tasks](#celery-tasks)
|
|
8. [API Endpoints](#api-endpoints)
|
|
9. [Base Classes](#base-classes)
|
|
10. [Middleware](#middleware)
|
|
11. [Utilities](#utilities)
|
|
12. [Modules](#modules)
|
|
|
|
---
|
|
|
|
## Backend Overview
|
|
|
|
The IGNY8 backend is a Django 5.2+ application using Django REST Framework (DRF) for API endpoints. The backend follows a modular architecture with clear separation of concerns, automatic account isolation, and support for asynchronous task processing via Celery.
|
|
|
|
### Key Features
|
|
|
|
- **Multi-Tenancy**: Complete account isolation with automatic filtering
|
|
- **RESTful API**: DRF ViewSets with consistent response format
|
|
- **Celery Integration**: Asynchronous task processing for long-running operations
|
|
- **Account/Site/Sector Hierarchy**: Hierarchical data organization
|
|
- **AI Integration**: Unified AI framework for all AI operations
|
|
- **Progress Tracking**: Real-time progress updates for Celery tasks
|
|
|
|
---
|
|
|
|
## Tech Stack
|
|
|
|
### Core Technologies
|
|
|
|
- **Django 5.2+**: Web framework
|
|
- **Django REST Framework**: API framework
|
|
- **PostgreSQL**: Database
|
|
- **Celery**: Asynchronous task queue
|
|
- **Redis**: Celery broker and caching
|
|
|
|
### Key Libraries
|
|
|
|
- **django-filter**: Advanced filtering
|
|
- **djangorestframework-simplejwt**: JWT authentication
|
|
- **requests**: HTTP client for external APIs
|
|
- **python-dotenv**: Environment variable management
|
|
|
|
---
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
backend/igny8_core/
|
|
├── auth/ # Multi-tenancy and authentication
|
|
│ ├── models.py # Account, User, Plan, Site, Sector, Industry models
|
|
│ ├── views.py # Account, User, Site, Sector ViewSets
|
|
│ ├── serializers.py # Account, User, Plan serializers
|
|
│ └── urls.py # Auth module URLs
|
|
├── modules/ # Feature modules
|
|
│ ├── planner/ # Keywords, Clusters, Ideas
|
|
│ │ ├── views.py # KeywordViewSet, ClusterViewSet, ContentIdeasViewSet
|
|
│ │ ├── serializers.py # Model serializers
|
|
│ │ └── urls.py # Planner module URLs
|
|
│ ├── writer/ # Tasks, Content, Images
|
|
│ │ ├── views.py # TasksViewSet, ContentViewSet, ImagesViewSet
|
|
│ │ ├── serializers.py # Model serializers
|
|
│ │ └── urls.py # Writer module URLs
|
|
│ ├── linker/ # Internal linking
|
|
│ │ ├── views.py # LinkerViewSet
|
|
│ │ ├── serializers.py # Link serializers
|
|
│ │ └── urls.py # Linker module URLs
|
|
│ ├── optimizer/ # Content optimization
|
|
│ │ ├── views.py # OptimizerViewSet
|
|
│ │ ├── serializers.py # Optimizer serializers
|
|
│ │ └── urls.py # Optimizer module URLs
|
|
│ ├── publisher/ # Publishing & deployment
|
|
│ │ ├── views.py # PublishingRecordViewSet, DeploymentRecordViewSet, PublisherViewSet
|
|
│ │ └── urls.py # Publisher module URLs
|
|
│ ├── site_builder/ # Site blueprint management
|
|
│ │ ├── views.py # SiteBlueprintViewSet, PageBlueprintViewSet, SiteAssetView
|
|
│ │ ├── serializers.py # Site builder serializers
|
|
│ │ └── urls.py # Site Builder module URLs
|
|
│ ├── automation/ # Automation rules
|
|
│ │ ├── views.py # AutomationRuleViewSet, ScheduledTaskViewSet
|
|
│ │ ├── serializers.py # Automation serializers
|
|
│ │ └── urls.py # Automation module URLs
|
|
│ ├── integration/ # External integrations
|
|
│ │ ├── views.py # IntegrationViewSet
|
|
│ │ └── urls.py # Integration module URLs
|
|
│ ├── system/ # Settings, Prompts, Integration
|
|
│ │ ├── models.py # AIPrompt, IntegrationSettings, AuthorProfile, Strategy
|
|
│ │ ├── views.py # AIPromptViewSet, AuthorProfileViewSet
|
|
│ │ ├── settings_views.py # SystemSettingsViewSet, AccountSettingsViewSet
|
|
│ │ ├── integration_views.py # IntegrationSettingsViewSet, task_progress
|
|
│ │ ├── utils.py # Default prompts, prompt loading
|
|
│ │ └── urls.py # System module URLs
|
|
│ └── billing/ # Credits, Transactions, Usage
|
|
│ ├── views.py # CreditTransactionViewSet, CreditBalanceViewSet, CreditUsageViewSet
|
|
│ ├── services.py # CreditService
|
|
│ └── urls.py # Billing module URLs
|
|
├── business/ # Business logic layer
|
|
│ ├── planning/ # Planner models (Keywords, Clusters, ContentIdeas)
|
|
│ ├── content/ # Writer models (Tasks, Content, Images)
|
|
│ ├── linking/ # Linker services
|
|
│ ├── optimization/ # Optimizer services
|
|
│ ├── publishing/ # Publisher models (PublishingRecord, DeploymentRecord)
|
|
│ ├── site_building/ # Site Builder models (SiteBlueprint, PageBlueprint, etc.)
|
|
│ ├── automation/ # Automation models (AutomationRule, ScheduledTask)
|
|
│ ├── integration/ # Integration models (SiteIntegration)
|
|
│ └── billing/ # Billing models (CreditTransaction, CreditUsageLog)
|
|
├── api/ # API base classes
|
|
│ ├── base.py # AccountModelViewSet, SiteSectorModelViewSet
|
|
│ └── pagination.py # CustomPageNumberPagination
|
|
├── utils/ # Shared utilities
|
|
│ ├── ai_processor.py # Unified AI interface (legacy, see AI functions)
|
|
│ └── content_normalizer.py # Content processing utilities
|
|
├── middleware/ # Custom middleware
|
|
│ ├── account.py # AccountContextMiddleware (sets request.account)
|
|
│ └── resource_tracker.py # ResourceTrackerMiddleware (API metrics)
|
|
├── ai/ # AI framework
|
|
│ ├── base.py # BaseAIFunction
|
|
│ ├── engine.py # AIEngine
|
|
│ ├── tasks.py # run_ai_task
|
|
│ ├── registry.py # Function registry
|
|
│ ├── prompts.py # PromptRegistry
|
|
│ ├── ai_core.py # AICore
|
|
│ ├── settings.py # Model configuration
|
|
│ ├── validators.py # Validation functions
|
|
│ ├── tracker.py # Progress tracking
|
|
│ └── functions/ # AI function implementations
|
|
│ ├── auto_cluster.py
|
|
│ ├── generate_ideas.py
|
|
│ ├── generate_content.py
|
|
│ ├── generate_image_prompts.py
|
|
│ └── generate_images.py
|
|
├── settings.py # Django settings
|
|
├── urls.py # Root URL configuration
|
|
└── celery.py # Celery configuration
|
|
```
|
|
|
|
---
|
|
|
|
## Models
|
|
|
|
### Base Models
|
|
|
|
#### AccountBaseModel
|
|
**File**: `auth/models.py`
|
|
|
|
**Purpose**: Base model for all account-isolated models.
|
|
|
|
**Fields**:
|
|
- `account`: ForeignKey to Account
|
|
- `created_at`: DateTimeField (auto_now_add)
|
|
- `updated_at`: DateTimeField (auto_now)
|
|
|
|
**Usage**: All models that need account isolation inherit from this.
|
|
|
|
#### SiteSectorBaseModel
|
|
**File**: `auth/models.py`
|
|
|
|
**Purpose**: Base model for models that belong to Site and Sector.
|
|
|
|
**Fields**:
|
|
- Inherits from `AccountBaseModel`
|
|
- `site`: ForeignKey to Site
|
|
- `sector`: ForeignKey to Sector
|
|
|
|
**Methods**:
|
|
- `save()`: Automatically sets `account` from `site.account` and validates sector belongs to site
|
|
|
|
**Usage**: Models like Keywords, Clusters, ContentIdeas, Tasks inherit from this.
|
|
|
|
### Auth Models
|
|
|
|
#### Account
|
|
**Table**: `igny8_accounts`
|
|
|
|
**Fields**:
|
|
- `name`: CharField
|
|
- `slug`: SlugField (unique)
|
|
- `owner`: ForeignKey to User
|
|
- `plan`: ForeignKey to Plan
|
|
- `credits`: IntegerField (default: 0)
|
|
- `status`: CharField (choices: active, suspended, trial, cancelled)
|
|
|
|
**Methods**:
|
|
- `is_system_account()`: Returns True if account is a system account
|
|
|
|
#### User
|
|
**Table**: `igny8_users`
|
|
|
|
**Inherits**: `AbstractUser`
|
|
|
|
**Fields**:
|
|
- `email`: EmailField (unique)
|
|
- `account`: ForeignKey to Account
|
|
- `role`: CharField (choices: developer, owner, admin, editor, viewer, system_bot)
|
|
|
|
**Methods**:
|
|
- `has_role(role)`: Checks if user has role
|
|
- `is_owner_or_admin()`: Checks if user is owner or admin
|
|
- `is_developer()`: Checks if user is developer
|
|
- `is_admin_or_developer()`: Checks if user is admin or developer
|
|
- `is_system_account_user()`: Checks if user belongs to system account
|
|
- `get_accessible_sites()`: Returns queryset of accessible sites
|
|
|
|
#### Plan
|
|
**Table**: `igny8_plans`
|
|
|
|
**Fields**: Extensive fields for limits (users, sites, keywords, clusters, content ideas, AI requests, word count, images, credits)
|
|
|
|
**Methods**:
|
|
- `clean()`: Validates plan limits
|
|
- `get_effective_credits_per_month()`: Returns included_credits or credits_per_month
|
|
|
|
#### Site
|
|
**Table**: `igny8_sites`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `name`: CharField
|
|
- `slug`: SlugField (unique per account)
|
|
- `domain`: URLField (optional)
|
|
- `industry`: ForeignKey to Industry (optional)
|
|
- `is_active`: BooleanField
|
|
- `status`: CharField
|
|
- `wp_url`: URLField (optional)
|
|
- `wp_username`: CharField (optional)
|
|
- `wp_app_password`: CharField (optional)
|
|
|
|
**Methods**:
|
|
- `get_active_sectors_count()`: Returns count of active sectors
|
|
- `can_add_sector()`: Returns True if site can add another sector (max 5)
|
|
|
|
#### Sector
|
|
**Table**: `igny8_sectors`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `site`: ForeignKey to Site
|
|
- `industry_sector`: ForeignKey to IndustrySector (optional)
|
|
- `name`: CharField
|
|
- `slug`: SlugField (unique per site)
|
|
- `is_active`: BooleanField
|
|
- `status`: CharField
|
|
|
|
**Validation**: Maximum 5 active sectors per site
|
|
|
|
### Planner Models
|
|
|
|
#### Keywords
|
|
**Table**: `igny8_keywords`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `keyword`: CharField
|
|
- `volume`: IntegerField (optional)
|
|
- `difficulty`: IntegerField (optional)
|
|
- `intent`: CharField (optional)
|
|
- `status`: CharField
|
|
- `cluster`: ManyToManyField to Clusters
|
|
|
|
#### Clusters
|
|
**Table**: `igny8_clusters`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `name`: CharField
|
|
- `description`: TextField (optional)
|
|
- `keywords_count`: IntegerField (calculated)
|
|
- `volume`: IntegerField (calculated)
|
|
- `status`: CharField
|
|
- `keywords`: ManyToManyField to Keywords
|
|
|
|
#### ContentIdeas
|
|
**Table**: `igny8_content_ideas`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `idea_title`: CharField
|
|
- `description`: TextField
|
|
- `content_type`: CharField
|
|
- `content_structure`: CharField
|
|
- `target_keywords`: TextField
|
|
- `keyword_cluster`: ForeignKey to Clusters
|
|
- `estimated_word_count`: IntegerField
|
|
- `status`: CharField
|
|
|
|
### Writer Models
|
|
|
|
#### Tasks
|
|
**Table**: `igny8_tasks`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `title`: CharField
|
|
- `description`: TextField
|
|
- `cluster`: ForeignKey to Clusters (optional)
|
|
- `idea`: ForeignKey to ContentIdeas (optional)
|
|
- `content_type`: CharField
|
|
- `content_structure`: CharField
|
|
- `status`: CharField
|
|
|
|
#### Content
|
|
**Table**: `igny8_content`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `task`: OneToOneField to Tasks
|
|
- `html_content`: TextField
|
|
- `word_count`: IntegerField
|
|
- `status`: CharField
|
|
- `wp_post_id`: IntegerField (optional)
|
|
- `meta_title`: CharField (optional)
|
|
- `meta_description`: TextField (optional)
|
|
- `primary_keyword`: CharField (optional)
|
|
- `secondary_keywords`: TextField (optional)
|
|
|
|
#### Images
|
|
**Table**: `igny8_images`
|
|
|
|
**Inherits**: `SiteSectorBaseModel`
|
|
|
|
**Fields**:
|
|
- `task`: ForeignKey to Tasks (optional)
|
|
- `content`: ForeignKey to Content (optional)
|
|
- `image_type`: CharField (choices: featured, in_article, desktop, mobile)
|
|
- `prompt`: TextField
|
|
- `image_url`: CharField
|
|
- `status`: CharField
|
|
|
|
### System Models
|
|
|
|
#### AIPrompt
|
|
**Table**: `igny8_ai_prompts`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `prompt_type`: CharField
|
|
- `prompt_value`: TextField
|
|
- `function_name`: CharField (optional)
|
|
|
|
#### IntegrationSettings
|
|
**Table**: `igny8_integration_settings`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `integration_type`: CharField (choices: openai, runware, image_generation)
|
|
- `config`: JSONField
|
|
|
|
#### AuthorProfile
|
|
**Table**: `igny8_author_profiles`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `name`: CharField
|
|
- `description`: TextField
|
|
- `tone`: CharField
|
|
- `language`: CharField
|
|
|
|
#### Strategy
|
|
**Table**: `igny8_strategies`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `name`: CharField
|
|
- `description`: TextField
|
|
- `sector`: ForeignKey to Sector (optional)
|
|
- `prompt_types`: JSONField
|
|
- `section_logic`: JSONField
|
|
- `is_active`: BooleanField
|
|
|
|
### Billing Models
|
|
|
|
#### CreditTransaction
|
|
**Table**: `igny8_credit_transactions`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `transaction_type`: CharField (choices: purchase, usage, refund, adjustment)
|
|
- `amount`: IntegerField
|
|
- `balance_after`: IntegerField
|
|
- `description`: TextField (optional)
|
|
|
|
#### CreditUsageLog
|
|
**Table**: `igny8_credit_usage_logs`
|
|
|
|
**Inherits**: `AccountBaseModel`
|
|
|
|
**Fields**:
|
|
- `operation_type`: CharField
|
|
- `credits_used`: IntegerField
|
|
- `cost_usd`: DecimalField
|
|
- `details`: JSONField (optional)
|
|
|
|
---
|
|
|
|
## ViewSets
|
|
|
|
### Base ViewSets
|
|
|
|
#### AccountModelViewSet
|
|
**File**: `api/base.py`
|
|
|
|
**Purpose**: Base ViewSet with automatic account filtering.
|
|
|
|
**Methods**:
|
|
- `get_queryset()`: Filters queryset by `request.account` (with admin/developer override)
|
|
- `perform_create()`: Sets account on created objects
|
|
- `get_serializer_context()`: Adds account to serializer context
|
|
|
|
**Access Control**:
|
|
- Admin/Developer users: Bypass account filtering
|
|
- System account users: Bypass account filtering
|
|
- Regular users: Only see data from their account
|
|
|
|
#### SiteSectorModelViewSet
|
|
**File**: `api/base.py`
|
|
|
|
**Purpose**: Base ViewSet with site/sector filtering and access control.
|
|
|
|
**Inherits**: `AccountModelViewSet`
|
|
|
|
**Methods**:
|
|
- `get_queryset()`: Filters by account, accessible sites, and optional site_id/sector_id
|
|
- `perform_create()`: Validates site access and sector-site relationship
|
|
- `get_serializer_context()`: Adds accessible sites and sectors to context
|
|
|
|
**Access Control**:
|
|
- Developers: All active sites
|
|
- System account users: All active sites
|
|
- Owners/Admins: All sites in their account
|
|
- Editors/Viewers: Only sites granted via `SiteUserAccess`
|
|
|
|
### Planner ViewSets
|
|
|
|
#### KeywordViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List keywords with filtering
|
|
- `create()`: Create keyword
|
|
- `retrieve()`: Get keyword details
|
|
- `update()`: Update keyword
|
|
- `destroy()`: Delete keyword
|
|
- `auto_cluster()`: Auto-cluster keywords using AI
|
|
- `bulk_delete()`: Bulk delete keywords
|
|
- `bulk_update_status()`: Bulk update keyword status
|
|
- `export_csv()`: Export keywords to CSV
|
|
- `import_csv()`: Import keywords from CSV
|
|
|
|
**Filtering**:
|
|
- Search: `keyword` field
|
|
- Filters: `status`, `cluster_id`, `intent`
|
|
- Custom: `difficulty_min`, `difficulty_max`, `volume_min`, `volume_max`
|
|
- Ordering: `created_at`, `volume`, `difficulty`
|
|
|
|
#### ClusterViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List clusters
|
|
- `create()`: Create cluster
|
|
- `retrieve()`: Get cluster details
|
|
- `update()`: Update cluster
|
|
- `destroy()`: Delete cluster
|
|
- `auto_generate_ideas()`: Auto-generate content ideas for clusters
|
|
|
|
#### ContentIdeasViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List content ideas
|
|
- `create()`: Create content idea
|
|
- `retrieve()`: Get content idea details
|
|
- `update()`: Update content idea
|
|
- `destroy()`: Delete content idea
|
|
|
|
### Writer ViewSets
|
|
|
|
#### TasksViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List tasks
|
|
- `create()`: Create task
|
|
- `retrieve()`: Get task details
|
|
- `update()`: Update task
|
|
- `destroy()`: Delete task
|
|
- `auto_generate_content()`: Auto-generate content for tasks
|
|
- `generate_images()`: Generate images for image records
|
|
- `bulk_delete()`: Bulk delete tasks
|
|
- `bulk_update()`: Bulk update task status
|
|
|
|
**Filtering**:
|
|
- Search: `title`, `keywords`
|
|
- Filters: `status`, `cluster_id`, `content_type`, `content_structure`
|
|
- Ordering: `title`, `created_at`, `word_count`, `status`
|
|
|
|
#### ContentViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List content
|
|
- `create()`: Create content
|
|
- `retrieve()`: Get content details
|
|
- `update()`: Update content
|
|
- `destroy()`: Delete content
|
|
- `publish_to_wordpress()`: Publish content to WordPress
|
|
|
|
#### ImagesViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List images
|
|
- `create()`: Create image
|
|
- `retrieve()`: Get image details
|
|
- `update()`: Update image
|
|
- `destroy()`: Delete image
|
|
- `generate_images()`: Generate images using AI
|
|
|
|
### Linker ViewSets
|
|
|
|
#### LinkerViewSet
|
|
**Inherits**: `viewsets.ViewSet`
|
|
|
|
**Actions**:
|
|
- `process()`: Process a single content item for internal linking
|
|
- `batch_process()`: Process multiple content items for internal linking
|
|
|
|
**Purpose**: AI-powered internal linking suggestions based on cluster matches
|
|
|
|
### Optimizer ViewSets
|
|
|
|
#### OptimizerViewSet
|
|
**Inherits**: `viewsets.ViewSet`
|
|
|
|
**Actions**:
|
|
- `optimize()`: Optimize content (auto-detects entry point)
|
|
- `batch_optimize()`: Batch optimize multiple content items
|
|
- `analyze()`: Analyze content without optimization
|
|
|
|
**Purpose**: Content optimization and scoring
|
|
|
|
### Publisher ViewSets
|
|
|
|
#### PublishingRecordViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List publishing records
|
|
- `create()`: Create publishing record
|
|
- `retrieve()`: Get publishing record details
|
|
- `update()`: Update publishing record
|
|
- `destroy()`: Delete publishing record
|
|
|
|
#### DeploymentRecordViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List deployment records
|
|
- `create()`: Create deployment record
|
|
- `retrieve()`: Get deployment record details
|
|
- `update()`: Update deployment record
|
|
- `destroy()`: Delete deployment record
|
|
|
|
#### PublisherViewSet
|
|
**Inherits**: `viewsets.ViewSet`
|
|
|
|
**Actions**:
|
|
- `publish()`: Publish content to destination
|
|
- `deploy()`: Deploy site blueprint
|
|
- `check_readiness()`: Check deployment readiness
|
|
|
|
#### SiteDefinitionView
|
|
**Inherits**: `APIView`
|
|
|
|
**Purpose**: Public endpoint for Sites Renderer to fetch site definitions
|
|
|
|
### Site Builder ViewSets
|
|
|
|
#### SiteBlueprintViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List site blueprints
|
|
- `create()`: Create site blueprint
|
|
- `retrieve()`: Get site blueprint details
|
|
- `update()`: Update site blueprint
|
|
- `destroy()`: Delete site blueprint
|
|
- `generate_structure()`: Generate site structure using AI
|
|
- `generate_all_pages()`: Generate all pages for blueprint
|
|
- `create_tasks()`: Create Writer tasks for pages
|
|
- `progress()`: Get cluster-level completion status
|
|
- `attach_clusters()`: Attach planner clusters to blueprint
|
|
- `detach_clusters()`: Detach clusters from blueprint
|
|
- `list_taxonomies()`: List taxonomies for blueprint
|
|
- `create_taxonomy()`: Create taxonomy for blueprint
|
|
- `import_taxonomies()`: Import taxonomies from external source
|
|
- `bulk_delete()`: Bulk delete blueprints
|
|
|
|
#### PageBlueprintViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List page blueprints
|
|
- `create()`: Create page blueprint
|
|
- `retrieve()`: Get page blueprint details
|
|
- `update()`: Update page blueprint
|
|
- `destroy()`: Delete page blueprint
|
|
- `generate_content()`: Generate content for page
|
|
- `regenerate()`: Regenerate page content
|
|
|
|
#### SiteAssetView
|
|
**Inherits**: `APIView`
|
|
|
|
**Actions**:
|
|
- `GET`: List files for site
|
|
- `POST`: Upload file
|
|
- `DELETE`: Delete file
|
|
|
|
#### SiteBuilderMetadataView
|
|
**Inherits**: `APIView`
|
|
|
|
**Actions**:
|
|
- `GET`: Get metadata (business types, audience profiles, brand personalities, hero imagery)
|
|
|
|
### Automation ViewSets
|
|
|
|
#### AutomationRuleViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List automation rules
|
|
- `create()`: Create automation rule
|
|
- `retrieve()`: Get automation rule details
|
|
- `update()`: Update automation rule
|
|
- `destroy()`: Delete automation rule
|
|
- `execute()`: Manually execute automation rule
|
|
|
|
#### ScheduledTaskViewSet
|
|
**Inherits**: `AccountModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List scheduled tasks
|
|
- `create()`: Create scheduled task
|
|
- `retrieve()`: Get scheduled task details
|
|
- `update()`: Update scheduled task
|
|
- `destroy()`: Delete scheduled task
|
|
|
|
### Integration ViewSets
|
|
|
|
#### IntegrationViewSet
|
|
**Inherits**: `SiteSectorModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List site integrations
|
|
- `create()`: Create site integration
|
|
- `retrieve()`: Get integration details
|
|
- `update()`: Update integration
|
|
- `destroy()`: Delete integration
|
|
- `test_connection()`: Test connection to integrated platform
|
|
- `sync()`: Sync content with integrated platform
|
|
- `sync_health()`: Check sync health status
|
|
|
|
### System ViewSets
|
|
|
|
#### IntegrationSettingsViewSet
|
|
**Inherits**: `viewsets.ViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List integrations
|
|
- `retrieve()`: Get integration settings
|
|
- `update()`: Save integration settings
|
|
- `save_post()`: Save integration settings (POST)
|
|
- `test_connection()`: Test API connection
|
|
- `test_openai()`: Test OpenAI connection
|
|
- `test_runware()`: Test Runware connection
|
|
- `generate_image()`: Test image generation
|
|
- `task_progress()`: Get Celery task progress
|
|
|
|
#### AIPromptViewSet
|
|
**Inherits**: `AccountModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List prompts
|
|
- `create()`: Create prompt
|
|
- `retrieve()`: Get prompt details
|
|
- `update()`: Update prompt
|
|
- `destroy()`: Delete prompt
|
|
- `reset_to_default()`: Reset prompt to default value
|
|
|
|
#### AuthorProfileViewSet
|
|
**Inherits**: `AccountModelViewSet`
|
|
|
|
**Actions**:
|
|
- `list()`: List author profiles
|
|
- `create()`: Create author profile
|
|
- `retrieve()`: Get author profile details
|
|
- `update()`: Update author profile
|
|
- `destroy()`: Delete author profile
|
|
|
|
---
|
|
|
|
## Serializers
|
|
|
|
### Planner Serializers
|
|
|
|
#### KeywordSerializer
|
|
**Fields**: All Keyword model fields
|
|
|
|
**Validation**: Validates keyword uniqueness, cluster belongs to same sector
|
|
|
|
#### ClusterSerializer
|
|
**Fields**: All Cluster model fields
|
|
|
|
**Read-Only Fields**: `keywords_count`, `volume` (calculated)
|
|
|
|
#### ContentIdeasSerializer
|
|
**Fields**: All ContentIdeas model fields
|
|
|
|
### Writer Serializers
|
|
|
|
#### TasksSerializer
|
|
**Fields**: All Tasks model fields
|
|
|
|
#### ContentSerializer
|
|
**Fields**: All Content model fields
|
|
|
|
#### ImagesSerializer
|
|
**Fields**: All Images model fields
|
|
|
|
### System Serializers
|
|
|
|
#### AIPromptSerializer
|
|
**Fields**: All AIPrompt model fields
|
|
|
|
#### IntegrationSettingsSerializer
|
|
**Fields**: All IntegrationSettings model fields
|
|
|
|
### Linker Serializers
|
|
|
|
#### LinkContentSerializer
|
|
**Fields**: `content_id`
|
|
|
|
#### BatchLinkContentSerializer
|
|
**Fields**: `content_ids` (array)
|
|
|
|
### Optimizer Serializers
|
|
|
|
#### OptimizeContentSerializer
|
|
**Fields**: `content_id`, `entry_point` (optional)
|
|
|
|
#### BatchOptimizeContentSerializer
|
|
**Fields**: `content_ids` (array), `entry_point` (optional)
|
|
|
|
#### AnalyzeContentSerializer
|
|
**Fields**: `content_id`
|
|
|
|
### Publisher Serializers
|
|
|
|
#### PublishingRecordSerializer
|
|
**Fields**: All PublishingRecord model fields
|
|
|
|
#### DeploymentRecordSerializer
|
|
**Fields**: All DeploymentRecord model fields
|
|
|
|
### Site Builder Serializers
|
|
|
|
#### SiteBlueprintSerializer
|
|
**Fields**: All SiteBlueprint model fields, includes nested `pages`
|
|
|
|
#### PageBlueprintSerializer
|
|
**Fields**: All PageBlueprint model fields
|
|
|
|
#### SiteBuilderMetadataSerializer
|
|
**Fields**: `business_types`, `audience_profiles`, `brand_personalities`, `hero_imagery_directions`
|
|
|
|
### Automation Serializers
|
|
|
|
#### AutomationRuleSerializer
|
|
**Fields**: All AutomationRule model fields
|
|
|
|
#### ScheduledTaskSerializer
|
|
**Fields**: All ScheduledTask model fields
|
|
|
|
### Integration Serializers
|
|
|
|
#### SiteIntegrationSerializer
|
|
**Fields**: All SiteIntegration model fields
|
|
|
|
---
|
|
|
|
## Celery Tasks
|
|
|
|
### AI Task Entry Point
|
|
|
|
#### run_ai_task
|
|
**File**: `ai/tasks.py`
|
|
|
|
**Purpose**: Unified Celery task entrypoint for all AI functions
|
|
|
|
**Parameters**:
|
|
- `function_name`: Function name (e.g., 'auto_cluster')
|
|
- `payload`: Function-specific payload
|
|
- `account_id`: Account ID
|
|
|
|
**Flow**:
|
|
1. Gets account from account_id
|
|
2. Gets function instance from registry
|
|
3. Creates AIEngine
|
|
4. Executes function via AIEngine
|
|
|
|
### Planner Tasks
|
|
|
|
#### auto_cluster_keywords_task
|
|
**File**: `modules/planner/tasks.py` (legacy, now uses `run_ai_task`)
|
|
|
|
**Purpose**: Auto-cluster keywords using AI
|
|
|
|
**Parameters**:
|
|
- `keyword_ids`: List of keyword IDs
|
|
- `account_id`: Account ID
|
|
- `site_id`: Site ID
|
|
- `sector_id`: Sector ID
|
|
|
|
**Progress Tracking**: Updates progress with request_steps and response_steps
|
|
|
|
#### auto_generate_ideas_task
|
|
**File**: `modules/planner/tasks.py` (legacy, now uses `run_ai_task`)
|
|
|
|
**Purpose**: Auto-generate content ideas for clusters
|
|
|
|
**Parameters**:
|
|
- `cluster_ids`: List of cluster IDs
|
|
- `account_id`: Account ID
|
|
|
|
**Progress Tracking**: Updates progress for each cluster
|
|
|
|
### Writer Tasks
|
|
|
|
#### auto_generate_content_task
|
|
**File**: `modules/writer/tasks.py` (legacy, now uses `run_ai_task`)
|
|
|
|
**Purpose**: Auto-generate content for tasks
|
|
|
|
**Parameters**:
|
|
- `task_ids`: List of task IDs
|
|
- `account_id`: Account ID
|
|
|
|
**Progress Tracking**: Updates progress for each task
|
|
|
|
#### process_image_generation_queue
|
|
**File**: `modules/writer/views.py` (via `ai/tasks.py`)
|
|
|
|
**Purpose**: Generate images for image records
|
|
|
|
**Parameters**:
|
|
- `image_ids`: List of image IDs
|
|
- `account_id`: Account ID
|
|
- `content_id`: Content ID (optional)
|
|
|
|
**Progress Tracking**: Updates progress for each image sequentially
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
### Base URL
|
|
|
|
`/api/v1/`
|
|
|
|
### Planner Endpoints
|
|
|
|
- `GET /api/v1/planner/keywords/` - List keywords
|
|
- `POST /api/v1/planner/keywords/` - Create keyword
|
|
- `GET /api/v1/planner/keywords/{id}/` - Get keyword
|
|
- `PUT /api/v1/planner/keywords/{id}/` - Update keyword
|
|
- `DELETE /api/v1/planner/keywords/{id}/` - Delete keyword
|
|
- `POST /api/v1/planner/keywords/auto_cluster/` - Auto-cluster keywords
|
|
- `POST /api/v1/planner/keywords/bulk_delete/` - Bulk delete keywords
|
|
- `POST /api/v1/planner/keywords/bulk_update_status/` - Bulk update status
|
|
- `GET /api/v1/planner/keywords/export_csv/` - Export keywords
|
|
- `POST /api/v1/planner/keywords/import_csv/` - Import keywords
|
|
- `GET /api/v1/planner/clusters/` - List clusters
|
|
- `POST /api/v1/planner/clusters/auto_generate_ideas/` - Auto-generate ideas
|
|
- `GET /api/v1/planner/ideas/` - List content ideas
|
|
|
|
### Writer Endpoints
|
|
|
|
- `GET /api/v1/writer/tasks/` - List tasks
|
|
- `POST /api/v1/writer/tasks/` - Create task
|
|
- `GET /api/v1/writer/tasks/{id}/` - Get task details
|
|
- `POST /api/v1/writer/tasks/auto_generate_content/` - Auto-generate content
|
|
- `GET /api/v1/writer/content/` - List content
|
|
- `GET /api/v1/writer/content/{id}/` - Get content details
|
|
- `POST /api/v1/writer/images/generate_images/` - Generate images
|
|
|
|
### Linker Endpoints
|
|
|
|
- `POST /api/v1/linker/process/` - Process content for internal linking
|
|
- `POST /api/v1/linker/batch_process/` - Batch process content for linking
|
|
|
|
### Optimizer Endpoints
|
|
|
|
- `POST /api/v1/optimizer/optimize/` - Optimize content
|
|
- `POST /api/v1/optimizer/batch_optimize/` - Batch optimize content
|
|
- `POST /api/v1/optimizer/analyze/` - Analyze content
|
|
|
|
### Publisher Endpoints
|
|
|
|
- `GET /api/v1/publisher/publishing-records/` - List publishing records
|
|
- `POST /api/v1/publisher/publishing-records/` - Create publishing record
|
|
- `GET /api/v1/publisher/deployments/` - List deployment records
|
|
- `POST /api/v1/publisher/deployments/` - Create deployment record
|
|
- `POST /api/v1/publisher/publish/` - Publish content
|
|
- `POST /api/v1/publisher/deploy/` - Deploy site blueprint
|
|
- `GET /api/v1/publisher/sites/{site_id}/definition/` - Get site definition (public)
|
|
|
|
### Site Builder Endpoints
|
|
|
|
- `GET /api/v1/site-builder/blueprints/` - List site blueprints
|
|
- `POST /api/v1/site-builder/blueprints/` - Create site blueprint
|
|
- `GET /api/v1/site-builder/blueprints/{id}/` - Get blueprint details
|
|
- `POST /api/v1/site-builder/blueprints/{id}/generate_structure/` - Generate structure
|
|
- `POST /api/v1/site-builder/blueprints/{id}/generate_all_pages/` - Generate all pages
|
|
- `POST /api/v1/site-builder/blueprints/{id}/create_tasks/` - Create tasks for pages
|
|
- `GET /api/v1/site-builder/blueprints/{id}/progress/` - Get progress
|
|
- `POST /api/v1/site-builder/blueprints/{id}/clusters/attach/` - Attach clusters
|
|
- `POST /api/v1/site-builder/blueprints/{id}/clusters/detach/` - Detach clusters
|
|
- `GET /api/v1/site-builder/blueprints/{id}/taxonomies/` - List taxonomies
|
|
- `POST /api/v1/site-builder/blueprints/{id}/taxonomies/` - Create taxonomy
|
|
- `POST /api/v1/site-builder/blueprints/{id}/taxonomies/import/` - Import taxonomies
|
|
- `POST /api/v1/site-builder/blueprints/bulk_delete/` - Bulk delete blueprints
|
|
- `GET /api/v1/site-builder/pages/` - List page blueprints
|
|
- `POST /api/v1/site-builder/pages/` - Create page blueprint
|
|
- `GET /api/v1/site-builder/pages/{id}/` - Get page details
|
|
- `POST /api/v1/site-builder/pages/{id}/generate_content/` - Generate content
|
|
- `POST /api/v1/site-builder/pages/{id}/regenerate/` - Regenerate page
|
|
- `GET /api/v1/site-builder/assets/` - List assets
|
|
- `POST /api/v1/site-builder/assets/` - Upload asset
|
|
- `DELETE /api/v1/site-builder/assets/` - Delete asset
|
|
- `GET /api/v1/site-builder/metadata/` - Get metadata
|
|
|
|
### Automation Endpoints
|
|
|
|
- `GET /api/v1/automation/rules/` - List automation rules
|
|
- `POST /api/v1/automation/rules/` - Create automation rule
|
|
- `GET /api/v1/automation/rules/{id}/` - Get rule details
|
|
- `POST /api/v1/automation/rules/{id}/execute/` - Execute rule
|
|
- `GET /api/v1/automation/scheduled-tasks/` - List scheduled tasks
|
|
- `POST /api/v1/automation/scheduled-tasks/` - Create scheduled task
|
|
|
|
### Integration Endpoints
|
|
|
|
- `GET /api/v1/integration/integrations/` - List site integrations
|
|
- `POST /api/v1/integration/integrations/` - Create integration
|
|
- `GET /api/v1/integration/integrations/{id}/` - Get integration details
|
|
- `POST /api/v1/integration/integrations/{id}/test_connection/` - Test connection
|
|
- `POST /api/v1/integration/integrations/{id}/sync/` - Sync content
|
|
- `GET /api/v1/integration/integrations/{id}/sync_health/` - Get sync health
|
|
|
|
### System Endpoints
|
|
|
|
- `GET /api/v1/system/settings/integrations/{pk}/` - Get integration settings
|
|
- `PUT /api/v1/system/settings/integrations/{pk}/` - Save integration settings
|
|
- `POST /api/v1/system/settings/integrations/{pk}/test_openai/` - Test OpenAI
|
|
- `POST /api/v1/system/settings/integrations/{pk}/test_runware/` - Test Runware
|
|
- `POST /api/v1/system/settings/integrations/{pk}/generate_image/` - Test image generation
|
|
- `GET /api/v1/system/settings/task_progress/{task_id}/` - Get task progress
|
|
|
|
---
|
|
|
|
## Base Classes
|
|
|
|
### AccountModelViewSet
|
|
|
|
**File**: `api/base.py`
|
|
|
|
**Purpose**: Base ViewSet with automatic account filtering
|
|
|
|
**Features**:
|
|
- Automatic account filtering
|
|
- Admin/Developer override
|
|
- Account context in serializers
|
|
|
|
### SiteSectorModelViewSet
|
|
|
|
**File**: `api/base.py`
|
|
|
|
**Purpose**: Base ViewSet with site/sector filtering
|
|
|
|
**Features**:
|
|
- Account filtering (inherited)
|
|
- Site access control
|
|
- Sector validation
|
|
- Accessible sites/sectors in serializer context
|
|
|
|
---
|
|
|
|
## Middleware
|
|
|
|
### AccountContextMiddleware
|
|
|
|
**File**: `middleware/account.py`
|
|
|
|
**Purpose**: Sets `request.account` from JWT token
|
|
|
|
**Functionality**:
|
|
- Extracts account ID from JWT token
|
|
- Loads Account object
|
|
- Sets `request.account`
|
|
|
|
### ResourceTrackerMiddleware
|
|
|
|
**File**: `middleware/resource_tracker.py`
|
|
|
|
**Purpose**: Tracks API request metrics
|
|
|
|
**Functionality**:
|
|
- Tracks CPU, memory, I/O usage
|
|
- Stores metrics in cache
|
|
- Provides metrics endpoint
|
|
|
|
---
|
|
|
|
## Utilities
|
|
|
|
### Content Normalizer
|
|
|
|
**File**: `utils/content_normalizer.py`
|
|
|
|
**Purpose**: Content processing utilities
|
|
|
|
**Functions**:
|
|
- `normalize_content()`: Converts plain text to HTML
|
|
- `_extract_body_content()`: Extracts body content from HTML
|
|
|
|
---
|
|
|
|
## Modules
|
|
|
|
### Planner Module
|
|
|
|
**Purpose**: Keyword management and content planning
|
|
|
|
**Models**: Keywords, Clusters, ContentIdeas
|
|
|
|
**ViewSets**: KeywordViewSet, ClusterViewSet, ContentIdeasViewSet
|
|
|
|
**Tasks**: Auto-cluster keywords, Auto-generate ideas
|
|
|
|
### Writer Module
|
|
|
|
**Purpose**: Content generation and management
|
|
|
|
**Models** (in `business/content/`):
|
|
- `Tasks`: Content generation tasks
|
|
- `Content`: Generated content pieces
|
|
- `Images`: Generated images
|
|
- `ContentClusterMap`: Content-to-cluster mapping
|
|
- `ContentTaxonomyMap`: Content taxonomy mapping
|
|
- `ContentAttributeMap`: Content attribute mapping
|
|
|
|
**ViewSets**:
|
|
- `TasksViewSet`: CRUD + auto-generate content, bulk operations
|
|
- `ContentViewSet`: CRUD + publish to WordPress
|
|
- `ImagesViewSet`: CRUD + generate images
|
|
|
|
**URLs**: `/api/v1/writer/`
|
|
|
|
### Linker Module
|
|
|
|
**Purpose**: Internal linking operations
|
|
|
|
**ViewSets**:
|
|
- `LinkerViewSet`: Process content for internal linking
|
|
|
|
**Actions**:
|
|
- `process()`: Process single content item
|
|
- `batch_process()`: Process multiple content items
|
|
|
|
**URLs**: `/api/v1/linker/`
|
|
|
|
### Optimizer Module
|
|
|
|
**Purpose**: Content optimization and scoring
|
|
|
|
**ViewSets**:
|
|
- `OptimizerViewSet`: Content optimization operations
|
|
|
|
**Actions**:
|
|
- `optimize()`: Optimize content (auto-detects entry point)
|
|
- `batch_optimize()`: Batch optimize content
|
|
- `analyze()`: Analyze content without optimization
|
|
|
|
**URLs**: `/api/v1/optimizer/`
|
|
|
|
### Publisher Module
|
|
|
|
**Purpose**: Publishing records and site deployment
|
|
|
|
**Models** (in `business/publishing/`):
|
|
- `PublishingRecord`: Records of content publishing
|
|
- `DeploymentRecord`: Records of site deployments
|
|
|
|
**ViewSets**:
|
|
- `PublishingRecordViewSet`: CRUD for publishing records
|
|
- `DeploymentRecordViewSet`: CRUD for deployment records
|
|
- `PublisherViewSet`: Publishing and deployment actions
|
|
- `SiteDefinitionView`: Public endpoint for Sites Renderer
|
|
|
|
**Actions**:
|
|
- `publish()`: Publish content to destination
|
|
- `deploy()`: Deploy site blueprint
|
|
- `check_readiness()`: Check deployment readiness
|
|
|
|
**URLs**: `/api/v1/publisher/`
|
|
|
|
### Site Builder Module
|
|
|
|
**Purpose**: Site blueprint management
|
|
|
|
**Models** (in `business/site_building/`):
|
|
- `SiteBlueprint`: Site structure definitions
|
|
- `PageBlueprint`: Page structure definitions
|
|
- `SiteBlueprintCluster`: Cluster-to-blueprint mapping
|
|
- `SiteBlueprintTaxonomy`: Taxonomy definitions
|
|
- `SiteBuilderOption`: Site builder configuration options
|
|
|
|
**ViewSets**:
|
|
- `SiteBlueprintViewSet`: CRUD + structure generation, cluster management
|
|
- `PageBlueprintViewSet`: CRUD + content generation
|
|
- `SiteAssetView`: Asset management
|
|
- `SiteBuilderMetadataView`: Metadata retrieval
|
|
|
|
**Actions**:
|
|
- `generate_structure()`: Generate site structure using AI
|
|
- `generate_all_pages()`: Generate all pages for blueprint
|
|
- `create_tasks()`: Create Writer tasks for pages
|
|
- `progress()`: Get cluster-level completion status
|
|
- `attach_clusters()`: Attach planner clusters
|
|
- `detach_clusters()`: Detach clusters
|
|
- `generate_content()`: Generate content for page
|
|
- `regenerate()`: Regenerate page content
|
|
|
|
**URLs**: `/api/v1/site-builder/`
|
|
|
|
**Note**: Site Builder Wizard UI has been removed. Only API-based blueprint management remains.
|
|
|
|
### Automation Module
|
|
|
|
**Purpose**: Automation rules and scheduled tasks
|
|
|
|
**Models** (in `business/automation/`):
|
|
- `AutomationRule`: Rule-based automation definitions
|
|
- `ScheduledTask`: Scheduled task definitions
|
|
|
|
**ViewSets**:
|
|
- `AutomationRuleViewSet`: CRUD + execute rule
|
|
- `ScheduledTaskViewSet`: CRUD for scheduled tasks
|
|
|
|
**Actions**:
|
|
- `execute()`: Manually execute automation rule
|
|
|
|
**URLs**: `/api/v1/automation/`
|
|
|
|
### Integration Module
|
|
|
|
**Purpose**: External platform integrations
|
|
|
|
**Models** (in `business/integration/`):
|
|
- `SiteIntegration`: Site-level integration configurations
|
|
|
|
**ViewSets**:
|
|
- `IntegrationViewSet`: CRUD + sync operations
|
|
|
|
**Actions**:
|
|
- `test_connection()`: Test connection to integrated platform
|
|
- `sync()`: Sync content with integrated platform
|
|
- `sync_health()`: Check sync health status
|
|
|
|
**URLs**: `/api/v1/integration/`
|
|
|
|
### System Module
|
|
|
|
**Purpose**: System configuration and AI settings
|
|
|
|
**Models**:
|
|
- `AIPrompt`: AI prompt templates
|
|
- `IntegrationSettings`: Account-level integration settings
|
|
- `AuthorProfile`: Author profile definitions
|
|
- `Strategy`: Content strategy definitions
|
|
|
|
**ViewSets**:
|
|
- `AIPromptViewSet`: CRUD + reset to default
|
|
- `IntegrationSettingsViewSet`: Integration settings management
|
|
- `AuthorProfileViewSet`: CRUD for author profiles
|
|
- `SystemSettingsViewSet`: System settings management
|
|
- `AccountSettingsViewSet`: Account settings management
|
|
|
|
**URLs**: `/api/v1/system/`
|
|
|
|
### Billing Module
|
|
|
|
**Purpose**: Credit management and usage tracking
|
|
|
|
**Models** (in `business/billing/`):
|
|
- `CreditTransaction`: Credit transaction records
|
|
- `CreditUsageLog`: Credit usage logging
|
|
|
|
**ViewSets**:
|
|
- `CreditTransactionViewSet`: CRUD for transactions
|
|
- `CreditBalanceViewSet`: Credit balance retrieval
|
|
- `CreditUsageViewSet`: Credit usage tracking
|
|
|
|
**Services**:
|
|
- `CreditService`: Credit operations (check, deduct, add, calculate)
|
|
|
|
**URLs**: `/api/v1/billing/`
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
The IGNY8 backend provides:
|
|
|
|
1. **Multi-Tenancy**: Complete account isolation with automatic filtering
|
|
2. **RESTful API**: DRF ViewSets with consistent response format
|
|
3. **Celery Integration**: Asynchronous task processing
|
|
4. **Hierarchical Organization**: Account > Site > Sector > Content structure
|
|
5. **AI Framework**: Unified AI framework for all AI operations
|
|
6. **Progress Tracking**: Real-time progress updates for Celery tasks
|
|
7. **Module-Based Design**: Clear separation of concerns across 10 modules
|
|
8. **Base Classes**: Reusable ViewSets for common patterns
|
|
9. **Middleware**: Account context and resource tracking
|
|
10. **Utilities**: Content processing and AI integration
|
|
11. **Internal Linking**: AI-powered internal linking suggestions
|
|
12. **Content Optimization**: Content optimization and scoring
|
|
13. **Publishing System**: Multi-destination publishing with deployment tracking
|
|
14. **Site Builder**: Site blueprint and structure management (API-based)
|
|
15. **Automation**: Rule-based automation and scheduled tasks
|
|
16. **Integration**: External platform integrations and synchronization
|
|
|
|
This architecture ensures scalability, maintainability, and extensibility while providing a robust foundation for the IGNY8 platform with 10 backend modules covering the complete content workflow from planning to publishing.
|
|
|