4.1 KiB
4.1 KiB
Writer Endpoints
Purpose
Document writer API endpoints for tasks, content, images, and taxonomies, including bulk actions and AI content generation triggers.
Code Locations (exact paths)
- Routing:
backend/igny8_core/modules/writer/urls.py - Views:
backend/igny8_core/modules/writer/views.py - Serializers:
backend/igny8_core/modules/writer/serializers.py - Services:
backend/igny8_core/business/content/services/content_generation_service.py
High-Level Responsibilities
- CRUD for writer entities scoped by account/site/sector.
- Provide bulk operations and AI content generation for tasks.
- Manage images and taxonomy terms linked to content/tasks.
Detailed Behavior
- Base path:
/api/v1/writer/ - Viewsets (inherit
SiteSectorModelViewSet, throttledwriter, paginated):TasksViewSet(/tasks/):- Filters: status, cluster_id, content_type, content_structure; search title/keywords; ordering by title/created_at/status.
- Bulk:
bulk_delete,bulk_update(status). auto_generate_content: accepts task IDs (max 10), requires account, enforces credit checks viaContentGenerationService, returns async task_id or synchronous result; 402 on insufficient credits.- Create requires site_id/sector_id; validates site/sector alignment; sets account/site/sector explicitly.
ImagesViewSet(/images/):- Filters: task_id, content_id, image_type, status; ordering by created_at/position/id.
- perform_create enforces site/sector presence (from request or defaults), sets account/site/sector; serves local files via
fileaction with existence checks.
ContentViewSet(/content/):- Filters/order/search defined in viewset (titles, status, etc.); manages taxonomy relationships; exposes status, SEO fields, cluster link, external IDs/URLs.
ContentTaxonomyViewSet(/taxonomies/):- CRUD for taxonomy terms (category/tag) scoped to site/sector.
- Serializers enforce required fields on create (e.g., cluster/content_type/content_structure for tasks; site/sector for content) and expose read-only derived fields (cluster/sector names, image/taxonomy info).
- Error handling: unified responses; validation errors return 400; missing resources return 404;
auto_generate_contentcan return 402/500 on credits/other errors.
Data Structures / Models Involved (no code)
Tasks,Content,Images,ContentTaxonomy, and related domain models;Account,Site,Sector.
Execution Flow
- Requests → DRF auth → base viewset filtering (account/site/sector) → serializer validation → model save → unified response; bulk/AI actions invoke services.
Cross-Module Interactions
- Planner clusters/ideas feed tasks; automation stages 3–6 operate on writer data; publishing/integration uses content/taxonomies/images.
- Billing credits enforced during AI content generation via
ContentGenerationService.
State Transitions
- Tasks:
queued→completed; Content:draft→review→published; Images:pending→generated.
Error Handling
- Standard unified responses; credit errors mapped to 402 in
auto_generate_content; file serving returns 404 for missing images.
Tenancy Rules
- All endpoints scoped to account/site/sector; base viewset and permissions enforce access; admin/developer/system may bypass filtering but records retain tenant/site/sector fields.
Billing Rules
- AI generation actions check/deduct credits via billing services; other CRUD does not alter credits.
Background Tasks / Schedulers
auto_generate_contentmay enqueue Celery AI tasks when returning task_id; automation uses writer endpoints indirectly via services.
Key Design Considerations
- Strict site/sector validation on create; max 10 tasks per auto_generate_content to manage load/credits.
- Image file serving is permissive but guarded by existence checks.
How Developers Should Work With This Module
- Supply site_id/sector_id on create; use bulk actions for batch changes.
- When extending AI flows, keep credit checks and account/site scoping intact.
- Reuse existing viewsets/serializers for new fields; ensure filters/throttles stay aligned with module scope.