darkua / json_delta

a service that tracks json model changes and lists them
0 stars 0 forks source link

-Json Delta service

This exercise is from an actual report on ClanHR. The objective is to build a service that tracks model changes and lists them. The service will receive two user versions, as json:

// old
{"_id": 1,
 "name": "Bruce Norries",
 "address": {"street": "Some street"}}

// new
{"_id": 1,
 "name": "Bruce Willis",
 "address": {"street": "Nakatomi Plaza"}}

Note that these json bags can be big and with several nested objects.

After that, a listing endpoint should be made available that returns a collection of data in the form:

[{"field": "name", "old": "Bruce Norris", "new": "Bruce Willis"},
 {"field": "address.street", "old": "Some Street", "new": "Nakatomi Plaza"}]

Note that the listing should be filtered by start date and end date, and that we only want a change per user/field on that timespan. So for the given events:

March: Name from A to B
March: Name from B to C
June: Name from C to D

If we filter for March, we should get only one change:

[{"field": "name", "old": "A", "new": "C"}]

Wrap-up

Create two endpoints, one to register json model the changes, and another to list the changes based on a start/end date filter.

/add {"id":1,"name":"foo"} 
/add [{"id":1,"name":"bar"},{"id":2,"name":"foobar"}]
// if no interval is passed filter all
/diff -d {"start":"2017-01-01", end:"2017-01-01"} // all changes from all objects that occurend in between timeinterval
/diff -d {"_id":1,start":"2017-01-01", end:"2017-01-01"} //all changes for obj id 1, in between time interval

Assumptions:

Running locally

npm install
npm test 
npm start

or using docker

docker pull darkua/json-delta

Go into scripts dir and you can run ./add.sh to register data, and you cand diff the data running ./diff.sh I add benchmarck script to add a large json file, and diff the contents timer ./benchmark.sh