Skip to main content

Sync Contract

:::info Source Sourced from services/marketplace-service/SYNC_CONTRACT.md in the documentation repo. :::

1. Applicability

Listings, Licenses, and Orders are replicable for offline browsing + learner license view. Orders never created offline (payment requires online).

2. Registration

{ service: 'marketplace', entityType: 'Listing', conflictPolicy: 'server_authoritative', deltaProjector: 'public_listings_by_tenant', pushHandler: 'none', versionField: 'updatedAt', schemaRef: 'schemas://marketplace/listing/v1' }
{ service: 'marketplace', entityType: 'License', conflictPolicy: 'server_authoritative', deltaProjector: 'licenses_by_user', pushHandler: 'none', versionField: 'updatedAt', schemaRef: 'schemas://marketplace/license/v1' }
{ service: 'marketplace', entityType: 'Order', conflictPolicy: 'server_authoritative', deltaProjector: 'orders_by_user', pushHandler: 'none', versionField: 'placedAt', schemaRef: 'schemas://marketplace/order/v1' }

3. Delta Format

Server → device delta with upserts on Listings (marketplace visibility), Licenses (user-owned), Orders (history). No deletes except GDPR.

4. Conflict Resolution

All server_authoritative. Client read-only.

5. Cursor

  • marketplace:tenant:{tid}:listings — public listings browsing.
  • marketplace:user:{uid}:licenses — user's licenses.
  • marketplace:user:{uid}:orders — user's order history.

6. LocalStore

listings: (id PK, providerTenantId, courseId, pricingPlans, marketing, state, updatedAt)
licenses: (id PK, userId, courseId, state, seats, remainingSeats, validFrom, validUntil, updatedAt)
orders: (id PK, userId, status, totals, placedAt, lines)

7. Offline Browsing

  • Marketplace catalog browsable offline (cached listings).
  • Purchases disabled offline — UI shows "online required."
  • Licenses visible offline (learner knows what they own).

8. Security

  • No payment-sensitive data cached.
  • PII minimized in cached orders (no full billing address offline).