Files
OSIT-AE-App-Svelte/documentation/PROJECT_CRUD_V3_UPGRADE.md
Scott Idem 25d6503afe Environment & Bootstrap Stability: Fix Ghost Account and Modernize PWA Manifest
- Resolved 'Ghost Account' warning by updating layout hydration to align with V3 ID Vision (account_id vs account_id_random).
- Improved site lookup reliability using Agent API Key and structured EQ filters for exact FQDN matching (including ports).
- Modernized PWA manifest with maskable icons (PNG/WebP), app shortcuts, and unique installation IDs.
- Implemented automatic Electron 'Native' mode detection in root layout.
- Fixed stale API URLs in Launcher native file download logic.
- Added V3 migration documentation and JWT verification test scripts.
2026-01-20 18:22:14 -05:00

4.2 KiB

Project: CRUD V3 Final Migration

Status: Active / In Progress Last Updated: 2026-01-18 Goal: Eliminate all dependency on legacy API wrappers (create_ae_obj_crud, get_ae_obj_id_crud, etc.) and ensure 100% adoption of the V3 Standard (/v3/crud/...).


1. Executive Summary

While the Journals and Identity (User/Account) modules have been successfully migrated to the V3 architecture, a significant portion of the Events, Sponsorships, and IDAA modules still rely on legacy V1/V2 wrappers. This document serves as the master checklist to reach 100% V3 compliance.

Why this matters:

  • Security: V3 enforces strict multi-tenant isolation via JWT.
  • Maintenance: Legacy wrappers in api.ts contribute to technical debt and "God Object" anti-patterns.
  • Performance: V3 offers optimized search and partial updates (PATCH) that legacy endpoints lack.

2. Migration Audit (Findings)

The following files have been identified as using legacy CRUD wrappers.

🔴 High Priority: Events Module

The entire ae_events library is heavily dependent on legacy v2 list and v1 CRUD wrappers.

  • src/lib/ae_events/ae_events__event_session.ts
  • src/lib/ae_events/ae_events__event_presenter.ts
  • src/lib/ae_events/ae_events__event_presentation.ts
  • src/lib/ae_events/ae_events__event_location.ts
  • src/lib/ae_events/ae_events__event_badge_template.ts
  • src/lib/ae_events/ae_events__event_device.ts
  • src/lib/ae_events/ae_events__exhibit.ts
  • src/lib/ae_events/ae_events__event_file.ts

🟠 Medium Priority: Core & Sponsorships

Legacy patterns persisting in core logic and config modules.

  • src/lib/ae_sponsorships/ae_sponsorships_functions.ts
  • src/lib/ae_core/core__hosted_files.ts (Uses get_ae_obj_id_crud)
  • src/lib/ae_core/core__site.ts (Uses get_ae_obj_id_crud)
  • src/lib/ae_core/core__country_subdivisions.ts
  • src/lib/ae_core/core__time_zones.ts
  • src/lib/ae_core/core__countries.ts

🟡 Low Priority: UI Components & Routes

Specific UI components that make direct API calls instead of using store functions.

  • src/lib/elements/element_data_store.svelte (Direct create_ae_obj_crud)
  • src/lib/elements/element_data_store_v2.svelte
  • src/routes/events/[event_id]/event_page_menu.svelte
  • src/routes/events/[event_id]/(pres_mgmt)/session/ae_comp__event_session_alert.svelte
  • src/routes/events/ae_comp__event_session_obj_li.svelte
  • src/routes/idaa/(idaa)/recovery_meetings/ae_idaa_comp__event_obj_id_edit.svelte

3. Migration Procedure

For each file listed above, follow this standard refactoring pattern:

  1. Imports:

    • Remove imports of create_ae_obj_crud, update_ae_obj_id_crud, etc.
    • Import V3 helpers: get_ae_obj_v3, create_ae_obj_v3, update_ae_obj_v3, delete_ae_obj_v3, search_ae_obj_v3.
  2. Pattern Replacement:

    • Get (Single):

      • Old: get_ae_obj_id_crud({ api_cfg, obj_type: 'event_session', obj_id: '...' })
      • New: get_ae_obj_v3({ api_cfg, obj_type: 'event_session', obj_id: '...' })
    • Get (List):

      • Old: get_ae_obj_li_for_obj_id_crud_v2(...)
      • New: get_ae_obj_li_v3(...) or search_ae_obj_v3(...) if complex filtering is needed.
    • Update:

      • Old: update_ae_obj_id_crud({ ..., fields: { name: 'New Name' } })
      • New: update_ae_obj_v3({ ..., data: { name: 'New Name' } })
      • Note: Ensure payload whitelisting is applied! V3 will 400 Error on unknown columns.
    • Create:

      • Old: create_ae_obj_crud({ ..., fields: { ... } })
      • New: create_ae_obj_v3({ ..., data: { ... } })
  3. Verification:

    • Verify the module still loads data (check Network tab for /v3/ requests).
    • Verify saving works (check for 400 Bad Request errors).

4. Final Cleanup

Once all checkboxes above are completed:

  1. Remove legacy exports from src/lib/api/api.ts.
  2. Delete src/lib/ae_api/api_get__crud_obj_li_v1.ts.
  3. Delete src/lib/ae_api/api_get__crud_obj_li_v2.ts.
  4. Delete src/lib/ae_api/api_get__crud_obj_id.ts (Legacy version).