serverpod-offline-sync/SPEC.md

1.3 KiB

Specification for the implementation

Starting the database

  • After the createAll(), call a custom function to inspect the database and list:
    • Each table unique constraints
    • All foreign keys

Check this research for reference.

How to specify which constraint to apply to each case?

Unique can be handled as:

  • on_conflict_merge (default)
  • on_conflict_overwrite

Foreign keys can be handled as:

  • on_fk_deleted_delete_this (default, if cascade delete)
  • on_fk_deleted_set_null (default, if optional)
  • on_fk_deleted_restore_related

After merge on sync, a callback must be available to check custom rules

There must have an easy way to issue fixes and re-run the merge.

Next:

  • Design the registration of constraints in the database.
  • Integrate the CRDT for retrieval of changes.
  • Integrate the CRDT merge logic.
  • Integrate the compensation logic with the merge logic.
  • Implement a regenerate process to run after migrations.
  • Add pending tests marked as TODO.
  • Transform this repo in a monorepo with this package and a Flutter version that provides a custom driftDatabase function that already passes the closure to add the next_hlc_timestamp function to the database.