Files
igny8/master-docs/10-backend/writer/WRITER-OVERVIEW.md
IGNY8 VPS (Salman) 3cbed65601 revamps docs complete
2025-12-07 14:14:29 +00:00

6.6 KiB
Raw Blame History

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 36)

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; status queued/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_content triggers ContentGenerationService.generate_content for up to 10 tasks, enforcing account presence and credit checks (returns 402 on InsufficientCreditsError); inherits tenant/site/sector filtering.
    • ImagesViewSet: CRUD with ordering/filtering; perform_create enforces site/sector and populates context; serve_image_file serves 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 by auto_generate_content; orchestrates AI content generation for tasks, returns async task_id when queued or synchronous result; raises InsufficientCreditsError on 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, plus ContentClusterMap/ContentAttribute.
  • Tenancy entities: Account, Site, Sector.

Execution Flow

  • Requests → DRF auth → SiteSectorModelViewSet filtering → serializer validation (site/sector required on create) → model save → unified response.
  • auto_generate_content validates 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 ContentGenerationService when 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: queuedcompleted; Content: draftreviewpublished; Images: pendinggenerated; Taxonomies created/updated/deleted via CRUD.

Error Handling

  • Viewsets return unified errors; bulk operations validate IDs/status; auto_generate_content returns 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 ContentGenerationService returns 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.