video-accessibility/backend/app/migrations/scripts
Vadym Samoilenko 1563714454 feat(saas): Phase 3 — membership-based authz + Mailgun + job.organization_id
authz.py (new):
- MembershipContext — per-request membership dict for the current user
- get_membership_context FastAPI dependency
- require_org_role(min_role) — dependency factory keyed off org_id path param
- require_platform_admin()
- OrgScopedQuery — adds organization_id filter; platform admin passes through
- bump_user_membership_cache — invalidates Redis key on membership writes

dependencies.py:
- get_accessible_project_ids now queries memberships collection first;
  legacy pm_client_ids / team.member_user_ids fallback retained until migration runs
  (four job-route access checks at lines 608/1054/1181/1538 are fixed via this function)

routes_clients.py:
- _assert_pm_or_admin and _assert_client_access are now async and query memberships
- All 10 call sites updated with await + db arg

emailer.py:
- Switched from SendGrid to Mailgun REST API via httpx (already in requirements)
- _send() is now fully async; same public method signatures preserved
- send_completion_email uses _send()

config.py:
- Added mailgun_api_key, mailgun_domain, mailgun_from settings
- sendgrid_api_key kept with empty default for backward compat

migration_2026-04-28-000003:
- Backfills job.organization_id from project.client_id
- Creates (organization_id, status, created_at) sparse index on jobs

routes_organizations.py / routes_invitations.py:
- Call bump_user_membership_cache after every membership write

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 16:56:42 +01:00
..
migration_2025-08-17-120000_initial_schema.py initial commit 2025-08-24 16:28:33 -05:00
migration_2025-08-17-120001_index_optimization.py initial commit 2025-08-24 16:28:33 -05:00
migration_2025-08-17-120002_audit_log_schema_update.py initial commit 2025-08-24 16:28:33 -05:00
migration_2025-10-10-000000_add_auth_provider.py fixed dates on scheme validator migration 2025-10-10 10:59:20 -05:00
migration_2025-10-10-000001_update_user_schema_validator.py fixed dates on scheme validator migration 2025-10-10 10:59:20 -05:00
migration_2025-12-22-000000_add_approved_source_status.py add approved_source and qc_feedback job statuses to MongoDB schema 2025-12-22 13:12:14 -06:00
migration_2025-12-27-000000_add_rendering_video_status.py fix: add rendering_video status to MongoDB schema validator 2025-12-27 08:40:23 -06:00
migration_2026-01-05-000000_add_failed_statuses.py fix: add tts_failed and render_failed to MongoDB schema validator 2026-01-05 14:09:41 -06:00
migration_2026-01-11-000000_add_rendering_qc_status.py feat: add migration for rendering_qc status in MongoDB schema 2026-01-11 10:05:05 -06:00
migration_2026-04-16-000000_add_linguist_role.py feat: add linguist role and user management navigation 2026-04-16 11:46:33 +01:00
migration_2026-04-27-000000_add_project_manager_role.py fix: add project_manager migration + add migration step to full-deploy.sh 2026-04-27 16:05:17 +01:00
migration_2026-04-28-000000_create_memberships_collection.py feat(saas): Phase 0+1 — Organization/Membership entities and dev branch 2026-04-27 16:46:24 +01:00
migration_2026-04-28-000001_backfill_memberships.py feat(saas): Phase 0+1 — Organization/Membership entities and dev branch 2026-04-27 16:46:24 +01:00
migration_2026-04-28-000002_create_invitations_collection.py feat(saas): Phase 2 — invitation flow, email templates, MS SSO zero-membership 2026-04-27 16:52:08 +01:00
migration_2026-04-28-000003_backfill_job_organization_id.py feat(saas): Phase 3 — membership-based authz + Mailgun + job.organization_id 2026-04-27 16:56:42 +01:00