Closes: FRMW-2892, FRMW-2893
**What**
Wired up the building block that we merged previously in order to manage data synchronization. The flow is as follow
- On application start
- Build schema object representation from configuration
- Check configuration changes
- if new entities configured
- Data synchronizer initialize orchestrator and start sync
- for each entity
- acquire lock
- mark existing data as staled
- sync all data by batch
- marked them not staled anymore
- acknowledge each processed batch and renew lock
- update metadata with last synced cursor for entity X
- release lock
- remove all remaining staled data
- if any entities removed from last configuration
- remove the index data and relations
Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
23 lines
559 B
TypeScript
23 lines
559 B
TypeScript
import { model } from "@medusajs/framework/utils"
|
|
import { IndexMetadataStatus } from "../utils/index-metadata-status"
|
|
|
|
const IndexMetadata = model
|
|
.define("IndexMetadata", {
|
|
id: model.id({ prefix: "idxmeta" }).primaryKey(),
|
|
entity: model.text(),
|
|
fields: model.text(),
|
|
fields_hash: model.text(),
|
|
status: model
|
|
.enum(IndexMetadataStatus)
|
|
.default(IndexMetadataStatus.PENDING),
|
|
})
|
|
.indexes([
|
|
{
|
|
name: "IDX_index_metadata_entity",
|
|
on: ["entity"],
|
|
unique: true,
|
|
},
|
|
])
|
|
|
|
export default IndexMetadata
|