3.4 KiB
3.4 KiB
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:
listwith slug filter:AllowAny(public read by slug, active sites only).create: authenticated users (viewer+); sets site account from request/user.- Other actions:
IsEditorOrAbovewith tenant access.
- Queryset logic:
- Unauthenticated with
slugquery param: returns active site by slug. - Authenticated admin/developer: all sites.
- Authenticated owner/admin: sites for user’s account.
- Other users: sites where they have
SiteUserAccess.
- Unauthenticated with
- 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; optionalsector_slugslist. - 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.
- Requires
- Create/update:
perform_createsets account; no single-active constraint.perform_updateretains 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 viaselect_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_industriesviaget_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_sectorsto 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.