Files
igny8/master-docs/40-product/ACCOUNT-LIFECYCLE.md
IGNY8 VPS (Salman) 3cbed65601 revamps docs complete
2025-12-07 14:14:29 +00:00

4.4 KiB

Account Lifecycle

Purpose

Explain how accounts are created, activated, associated with plans/subscriptions, how users access them, and how account state affects the platform.

Code Locations (exact paths)

  • Models: backend/igny8_core/auth/models.py (Account, User, Plan, Subscription, Site, SiteUserAccess)
  • Auth middleware: backend/igny8_core/auth/middleware.py (sets request.account, validates plan status)
  • Permissions: backend/igny8_core/auth/permissions.py
  • Account settings API: backend/igny8_core/modules/system/views.py (account settings), auth/views.py (team)
  • Frontend account settings: frontend/src/pages/account/AccountSettingsPage.tsx
  • Frontend auth store: frontend/src/store/authStore.ts

High-Level Responsibilities

  • Maintain tenant identity (Account) and link users, sites, sectors, plans, subscriptions, and credits.
  • Control access via account state and user roles.
  • Provide account-level settings (name, billing email/address, tax info).

Detailed Behavior

  • Account fields: name, slug, owner, plan, credits, status (active, suspended, trial, cancelled), timestamps.
  • User fields: extends Django user with account FK and role (developer, owner, admin, editor, viewer, system_bot).
  • Plan/subscription: Plan defines limits and included credits; Subscription links account to plan and holds billing cycle/status; Account.plan references current plan.
  • Sites: Site attaches to account; SiteUserAccess grants non-admin users site-level access.
  • Middleware: AccountContextMiddleware resolves account from JWT or session, ensures account is active, and attaches plan information; rejects access for inactive accounts.
  • Settings update: AccountSettings API exposes billing fields consumed by AccountSettingsPage.

Data Structures / Models Involved (no code)

  • Account, User, Plan, Subscription, Site, SiteUserAccess, Sector, CreditTransaction, CreditUsageLog.

Execution Flow

  • Signup/Login → JWT issued with account_id → middleware sets request.account.
  • Requests pass through permissions tied to roles and account context.
  • Plan changes/subscriptions update Account.plan and Subscription records (via billing endpoints and invoice_service/payment_service).
  • Account settings updates persist via system/account settings endpoint and reflect in billing data.

Cross-Module Interactions

  • Billing uses Account.credits and plan linkage; credit_service deducts/credits per action.
  • Sites/Planner/Writer/Automation all inherit account scoping via base viewsets and base models.
  • Integration (WordPress) uses account-scoped Site.wp_api_key for API key auth.

State Transitions (if applicable)

  • status: trial → active → (suspended/cancelled) based on plan/payment handling (enforced via middleware checks).
  • plan changes when subscriptions are created/updated; Subscription.status drives billing state.
  • Site activation independent per site; account state still gates overall access.

Error Handling

  • Middleware rejects requests for inactive/suspended accounts; API returns unified error response.
  • Permissions reject unauthorized roles before hitting business logic.

Tenancy Rules

  • Every model inherits account (direct FK or via base models); every request resolves request.account.
  • Querysets in viewsets filter by account (and site/sector where applicable); public reads limited to specific cases (e.g., active site by slug).

Billing Rules (if applicable)

  • Plan inclusion and subscription determine credit grants; credits stored on Account; deductions logged via CreditTransaction/CreditUsageLog.

Background Tasks / Schedulers (if applicable)

  • None specific to account state; billing/automation tasks run with account context provided by Celery payloads.

Key Design Considerations

  • Account is the tenant boundary; all downstream objects carry account FK for isolation.
  • Middleware centralizes account activation/plan validation to avoid per-view duplication.

How Developers Should Work With This Module

  • When adding new resources, inherit from AccountBaseModel/SiteSectorBaseModel and use base viewsets to enforce scoping.
  • On new plan features/limits, extend Plan and ensure middleware/permissions or service checks enforce them.
  • Preserve slug immutability for stability across integrations.