Files
igny8/master-docs/20-api/ENDPOINTS/sites.md
IGNY8 VPS (Salman) 3cbed65601 revamps docs complete
2025-12-07 14:14:29 +00:00

3.4 KiB
Raw Blame History

Site Endpoints

Purpose

Document site management endpoints under the auth module, including creation, listing, sector selection, and activation.

Code Locations (exact paths)

  • Routing: backend/igny8_core/auth/urls.py
  • Views: backend/igny8_core/auth/views.py (SiteViewSet)
  • Serializers: backend/igny8_core/auth/serializers.py (SiteSerializer, SectorSerializer)

High-Level Responsibilities

  • CRUD for sites scoped to an account, with role-based access.
  • Allow public read by slug for active sites (renderer support).
  • Manage sector selection and activation per site.

Detailed Behavior

  • Base path: /api/v1/auth/sites/
  • Permissions:
    • list with slug filter: AllowAny (public read by slug, active sites only).
    • create: authenticated users (viewer+); sets site account from request/user.
    • Other actions: IsEditorOrAbove with tenant access.
  • Queryset logic:
    • Unauthenticated with slug query param: returns active site by slug.
    • Authenticated admin/developer: all sites.
    • Authenticated owner/admin: sites for users account.
    • Other users: sites where they have SiteUserAccess.
  • Actions:
    • GET /sites/ list (with filters above).
    • POST /sites/ create site; account set from request/user.
    • GET /sites/{id}/sectors/ list active sectors for the site.
    • POST /sites/{id}/set_active/ marks site active (no deactivation of others).
    • POST /sites/{id}/select_sectors/ sets industry and sectors:
      • Requires industry_slug; optional sector_slugs list.
      • Validates industry exists/active; enforces plan sector limit (get_max_sectors_limit).
      • Deactivates sectors not in provided list; ensures sectors belong to industry; creates missing site sectors as needed; returns site + sectors.
  • Create/update:
    • perform_create sets account; no single-active constraint.
    • perform_update retains account; no single-active constraint.

Data Structures / Models Involved (no code)

  • Site, Sector, Industry, IndustrySector, Plan (for sector limits), SiteUserAccess, Account.

Execution Flow

  • Requests → DRF auth (JWT/session) → permissions → queryset scoping → serializer validation → model ops → unified response. Public slug reads bypass account filtering.

Cross-Module Interactions

  • Sites link to planner/writer records via site/sector; integration uses Site.wp_api_key; plan sector limits referenced here.

State Transitions

  • Site activation via set_active; sector activation/deactivation via select_sectors; industry assignment updated on selection.

Error Handling

  • 400 for missing industry slug or exceeding sector limits; 404 for missing site/industry; 500 if site lacks account when selecting sectors.

Tenancy Rules

  • Account-scoped except public slug read; role-based overrides for admins/developers; SiteUserAccess governs non-admin access.

Billing Rules

  • Sector limit enforced from plan (max_industries via get_max_sectors_limit).

Background Tasks / Schedulers

  • None in site endpoints.

Key Design Considerations

  • Public slug access supports site renderer without auth.
  • Sector selection enforces industry/plan constraints and deactivates unselected sectors.

How Developers Should Work With This Module

  • Use select_sectors to set industry/sector with plan-aware limits.
  • When extending site data, keep public slug path safe and scoped to active sites; maintain role-based access controls.