diff --git a/src/service.ts b/src/service.ts index c6094b7a99cad5f93b6c5f13e3e190acc21a31be..448d534c48a3f771e9f798ea8e5b6d49cc0f1faf 100644 --- a/src/service.ts +++ b/src/service.ts @@ -27,6 +27,7 @@ import express from "express"; import { makeExecutableSchema } from "graphql-tools"; import Nano, { MaybeDocument } from "nano"; import { OpenAPI, useSofa } from "sofa-api"; +import { crdtlib } from "@concordant/c-crdtlib"; // http://USERNAME:PASSWORD/URL:PORT const dbUrl = process.env.COUCHDB_URL || "http://localhost:5984/"; @@ -225,7 +226,12 @@ function updateObject(dbName: string, docName: string, document: string) { .use(dbName) .get(docName) .then((body) => { - const newDocument = JSON.parse(document); + const CRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson(document); + const bodyCRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson( + JSON.stringify(body) + ); + bodyCRDT.merge(CRDT); + const newDocument = JSON.parse(bodyCRDT.toJson()); newDocument._rev = body._rev; client.db .use(dbName)