You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -4,50 +4,13 @@ This repository contains tools and services for synchronizing data between LFX v
4
4
5
5
## Overview
6
6
7
-
Most data entities are synced from v1 into native LFX One entities. Bidirectional sync is implemented for committees and committee members.
7
+
This repository serves two distinct purposes:
8
8
9
-
However, due to the size, complexity, and number of external interactions the LFX Meetings stack has, v1 and v2 meetings will be kept separate, though v1 meetings will be made avaliable as read-only, natively-permissioned entities within LFX One via the query service.
9
+
1.**Real-time streaming replication.** PostgreSQL WAL events (via `wal-listener`) and DynamoDB Streams are replicated in real time—alongside periodic Meltano backfills—into a `v1-objects` NATS KV bucket. LFX One wrapper services subscribe to this bucket to drive indexing pipelines (OpenSearch via the indexer service) and access-control pipelines (OpenFGA via fga-sync), without needing to integrate directly with ITX eventing.
10
10
11
-
```mermaid
12
-
flowchart TD
13
-
V1[LFX v1 Meetings] --> Sync[Data Sync Process]
14
-
Projects --> Sync2[Data Backfill]
15
-
Committees --> Sync3[Data Backfill]
16
-
Sync --> ShadowV1[**v1 Meetings**<br/>- Synced from v1<br/>- Read-only in LFX One<br/>- Separate from native v2]
17
-
Sync2 --> ProjectsV2
18
-
Sync3 --> CommitteesV2
19
-
20
-
NativeV2[**Native v2 Meetings**<br/>- Created directly in v2<br/>- Full CRUD operations]
21
-
ProjectsV2[Native v2 Projects]
22
-
CommitteesV2[Native v2 Committees]
23
-
24
-
ShadowV1 --> LFXOne[LFX One UI]
25
-
NativeV2 --> LFXOne
26
-
ProjectsV2 & CommitteesV2 --> LFXOne
27
-
28
-
LFXOne --> Search[Search & Query<br/>Services]
29
-
LFXOne --> FGA[OpenFGA<br/>Access Control]
30
-
LFXOne --> JoinFlow[Meeting Join Flow]
31
-
32
-
subgraph "LFX One Platform"
33
-
Search
34
-
FGA
35
-
JoinFlow
36
-
end
37
-
38
-
subgraph "v1 Data"
39
-
V1
40
-
Projects
41
-
Committees
42
-
end
11
+
2.**Bidirectional sync for "core" resources.** Projects and committees are fully synced in both directions between LFX v1 and LFX One. This gives LFX One a self-contained stack for these entity types, which simplifies developer environment stand-up by removing the dependency on the highly-interconnected LFX/Salesforce/ITX stack.
43
12
44
-
subgraph "v2 Data"
45
-
ShadowV1
46
-
NativeV2
47
-
ProjectsV2
48
-
CommitteesV2
49
-
end
50
-
```
13
+
ITX-hosted resources such as Meetings are handled by v2 "wrapper" services that sit in front of the ITX APIs and rely on the NATS KV replication above for eventing; they do **not** get their own native v2 entity storage. See the [ITX wrappers component diagram](#itx-wrappers-component-diagram) in the Architecture Diagrams section for how this fits together.
51
14
52
15
## Prerequisites
53
16
@@ -63,14 +26,23 @@ Please see each component for further setup instructions.
63
26
This repository contains three main components:
64
27
65
28
### [Meltano](./meltano/README.md)
29
+
66
30
Data extraction and loading pipeline that extracts data from LFX v1 sources (DynamoDB for meetings, PostgreSQL for projects/committees) and loads it into NATS KV stores for processing by the v2 platform.
Go service that monitors NATS KV stores for replicated v1 data and synchronizes it with the LFX v2 platform APIs, handling data transformation and conflict resolution.
Kubernetes deployment manifests for the custom app service and WAL listener component, providing scalable deployment options for production environments.
73
39
40
+
## Research & guides
41
+
42
+
-[Adding a new DynamoDB table](./research/adding-dynamodb-table.md) — step-by-step checklist for onboarding a new DynamoDB table into the Meltano pipeline and stream consumer, with a worked example.
43
+
-[Updating the Meltano catalog ConfigMap](./research/updating-meltano-catalog.md) — how to regenerate and apply the schema cache when tables or columns change.
44
+
-[Meetings v1 vs v2](./research/meetings-v1-vs-v2.md) — comparison of the v1 and v2 meetings data models.
45
+
74
46
## NATS API
75
47
76
48
The v1-sync-helper service provides a NATS request/reply function for querying v1-v2 ID mappings.
@@ -86,12 +58,14 @@ The v1-sync-helper service provides a NATS request/reply function for querying v
86
58
Send a NATS request to `lfx.lookup_v1_mapping` with the mapping key as the payload. The service will respond with the corresponding mapping value or an error.
87
59
88
60
**Request Format:**
61
+
89
62
```
90
63
Subject: lfx.lookup_v1_mapping
91
64
Payload: <mapping_key>
92
65
```
93
66
94
67
**Response Format:**
68
+
95
69
-**Success**: The mapped value as a string
96
70
-**Not Found**: Empty string (`""`)
97
71
-**Error**: String prefixed with `"error: "` (e.g., `"error: connection timeout"`)
@@ -116,11 +90,78 @@ The following table shows the supported mapping key patterns and their expected
116
90
117
91
## Architecture Diagrams
118
92
119
-
Regarding the following diagrams:
93
+
Regarding the following sequence diagrams:
94
+
95
+
- "Projects API" is representative of the core resources that have bidirectional sync (projects, committees). ITX-hosted resources such as Meetings are handled by wrapper services that subscribe to the NATS KV bucket instead—see the component diagram below.
120
96
121
-
- The DynamoDB source (incremental or realtime) is not currently included in the diagrams.
122
-
- The planned bidirectional sync (LFX One changes back to v1) is included in the diagrams.
123
-
- "Projects API" is representative of most data entities. However, v1 Meetings push straight to OpenSearch and OpenFGA (via platform services)—this is not shown.
97
+
### ITX wrappers component diagram
98
+
99
+
This diagram shows how the LFX One platform, the v1-sync-helper replication pipeline, and ITX-hosted services fit together at the component level.
0 commit comments