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).