6.6 KiB
6.6 KiB
Writer Overview
Purpose
Describe how the writer module manages tasks, content, images, and taxonomies, including validations, tenancy, and API behaviors.
Code Locations (exact paths)
- Models:
backend/igny8_core/business/content/models.py - Serializers:
backend/igny8_core/modules/writer/serializers.py - Views:
backend/igny8_core/modules/writer/views.py - URLs:
backend/igny8_core/modules/writer/urls.py - Services:
backend/igny8_core/business/content/services/content_generation_service.py,validation_service.py,metadata_mapping_service.py - Automation linkages:
backend/igny8_core/business/automation/services/automation_service.py(stages 3–6)
High-Level Responsibilities
- Manage tenant/site/sector-scoped tasks, generated/imported content, images, and taxonomies.
- Provide CRUD and bulk operations for tasks and images; content generation triggers; taxonomy CRUD.
- Enforce site/sector alignment on creation and propagate account/site/sector to related records.
- Feed automation and publishing flows with content and images, and integrate with billing credits for AI operations.
Detailed Behavior
- Models (all inherit tenant/site/sector bases; many soft-deletable):
Tasks: queued work items tied to clusters/ideas/taxonomy; content type/structure; keywords text; word_count target; statusqueued/completed.Content: generated/imported content with HTML, SEO fields, cluster link, content type/structure, taxonomy M2M, external IDs/URLs/metadata, sync status, source (igny8/wordpress), status (draft/review/published), word_count, timestamps.Images: linked to content or task; auto-sets account/site/sector from provider; tracks type, URL/path, prompt, status, position.ContentTaxonomy: site/sector taxonomy terms (category/tag) with external taxonomy/id, sync status, description, count, metadata; unique per site by slug+type and by external id+taxonomy.- Supporting:
ContentClusterMap,ContentAttribute(documented in domain models).
- Serializers:
TasksSerializer: requires cluster/content_type/content_structure on create; exposes cluster/sector names; write-only site_id/sector_id; defaults status to queued if absent.ImagesSerializer: exposes task/content titles; read-only derived fields; creation requires site/sector (validated, with fallback to request user active site default sector); sets account/site/sector via base perform_create.ContentSerializer: exposes cluster/sector names; taxonomy terms grouped (tags/categories); image status flags; write-only site_id/sector_id; validates presence of required fields and status transitions.- Group serializers for images support grouped responses by content.
- Views:
TasksViewSet: filters/search/order; bulk_delete, bulk_update status;auto_generate_contenttriggersContentGenerationService.generate_contentfor up to 10 tasks, enforcing account presence and credit checks (returns 402 onInsufficientCreditsError); inherits tenant/site/sector filtering.ImagesViewSet: CRUD with ordering/filtering; perform_create enforces site/sector and populates context;serve_image_fileserves local files with basic checks.ContentViewSet: CRUD for content; ordering/filtering; handles taxonomy assignments; exposes status/SEO fields; uses base scoping.ContentTaxonomyViewSet: CRUD for taxonomy terms (category/tag) scoped to site/sector; inherits base scoping.
- Services:
ContentGenerationService: invoked byauto_generate_content; orchestrates AI content generation for tasks, returns async task_id when queued or synchronous result; raisesInsufficientCreditsErroron low balance.ContentValidationService,MetadataMappingService: additional processing/validation/mapping (used in writer flows and publishing).
- Automation linkage:
- Stage 3 creates tasks from ideas; Stage 4 generates content; Stage 5 generates image prompts; Stage 6 generates images and moves content to review.
Data Structures / Models Involved (no code)
Tasks,Content,Images,ContentTaxonomy, plusContentClusterMap/ContentAttribute.- Tenancy entities:
Account,Site,Sector.
Execution Flow
- Requests → DRF auth →
SiteSectorModelViewSetfiltering → serializer validation (site/sector required on create) → model save → unified response. auto_generate_contentvalidates task IDs/account, calls service → service may enqueue Celery AI tasks or run synchronously → response with task_id or result.- Images creation auto-inherits account/site/sector from linked task/content; local file serving bypasses account filter for read-only access.
Cross-Module Interactions
- Planner clusters/ideas feed tasks; tasks/content/images feed publishing and automation stages.
- Billing credits enforced via
ContentGenerationServicewhen AI is used; automation aggregates credits used per stage from AI task logs. - Integration/publishing sync uses content/taxonomy/image data when pushing to external platforms.
State Transitions
- Tasks:
queued→completed; Content:draft→review→published; Images:pending→generated; Taxonomies created/updated/deleted via CRUD.
Error Handling
- Viewsets return unified errors; bulk operations validate IDs/status;
auto_generate_contentreturns 400/404/402/500 depending on validation, missing tasks, insufficient credits, or unexpected errors. - Images file serving returns 404 on missing file/image.
Tenancy Rules
- Base viewset filters enforce account/site/sector scoping; admins/developers/system can bypass filtering; persisted records retain tenant/site/sector ownership.
- Creation requires site/sector; account set from request/site/user; Images perform_create validates presence of site/sector.
Billing Rules
- AI content generation is guarded by credit checks; InsufficientCredits returns HTTP 402; credit logging occurs in billing services at AI call sites.
Background Tasks / Schedulers
- AI generation may run via Celery when
ContentGenerationServicereturns a task_id; automation stages run inside Celery workers for bulk flows.
Key Design Considerations
- Strict site/sector requirements prevent cross-site contamination.
- Bulk limits (max 10 tasks in auto_generate_content) to control credit burn and processing load.
- Image serving permits public access via endpoint while still performing existence checks.
How Developers Should Work With This Module
- Use existing serializers/viewsets; keep site/sector required on create.
- When extending AI generation, ensure billing checks (
CreditService) and account/site scoping are preserved. - For new bulk actions, follow current patterns: validate input, operate on filtered queryset, return unified responses.