108 lines
3.0 KiB
Plaintext
108 lines
3.0 KiB
Plaintext
OLD Backend algorithm:
|
|
|
|
/*
|
|
SYNC STRATEGY
|
|
=-=-=-=-=-=-=
|
|
|
|
NEW ITEMS:
|
|
client record is iterated looking for non id or versioned items meaning newly added. If any are found the master rev is incremented and new items
|
|
are added.
|
|
|
|
DELETED ITEMS:
|
|
Server record is itereated looking for deleted items (not on the client's list and are older revision than the client version), if any are
|
|
found master rev is incremented (unless it was already) then they are removed from the master list.
|
|
|
|
UPDATE
|
|
Compare client record to master record, compare list name for a change, then find all items that have the same ID but different user editable values, if any found update master rev
|
|
if not done already, make master changed items match client changed items, update master.
|
|
|
|
RETURN:
|
|
Finally, if master list has changed, it is saved to db then it is returned to user otherwise {nochange:1} or something is returned.
|
|
*/
|
|
|
|
|
|
|
|
NEW ALGORITHM
|
|
Basically the same, except it will sync all lists on the device at once, so the routes need to take a list of lists of listitems as a chunk, not just a single list
|
|
|
|
|
|
|
|
OLD ROUTES
|
|
=-=-=-=-=-=
|
|
|
|
//POST - GET AN AUTHENTICATION TOKEN
|
|
router.route('/authenticate')
|
|
|
|
|
|
//GET USERS LISTS
|
|
// get all the lists for username specified
|
|
router.route('/mylists')
|
|
|
|
|
|
//GET A LIST OBJECT
|
|
// get the list object for id specified .
|
|
router.route('/list/:listid')
|
|
|
|
|
|
//POST - CREATE / SYNC A LIST
|
|
router.route('/list')
|
|
|
|
|
|
//DELETE - REMOVE A LIST
|
|
router.route('/list')
|
|
|
|
|
|
//DOWNLOAD - download all data
|
|
router.route('/mylists/download_all')
|
|
|
|
|
|
NEW ROUTES
|
|
=-=-=-=-=-
|
|
Since there is so little data overall in these lists, we are just going to assume all lists on all devices.
|
|
A Sync operation just sends the whole graph and gets the whole graph back, it's stored in a single field in sqlite table
|
|
|
|
If a user doesn't want to see a list maybe it's filtered out at the client view
|
|
|
|
Authenticate - POST
|
|
|
|
|
|
/user - post get
|
|
Gets and sets the users list subscriptions
|
|
|
|
/sync
|
|
POST -
|
|
client posts their entire subscribed list graph at once,
|
|
the return is the entire user's list graph after synced at server
|
|
new lists are also created via this mechanism (at client first)
|
|
If a client is just getting lists (for example in a first run scenario) they just post an empty list graph
|
|
GET - (no get? Post an empty list if you want to get all the user's lists)
|
|
|
|
|
|
|
|
|
|
NEW List data object graph:
|
|
|
|
{
|
|
|
|
lists:[
|
|
Name:listname,
|
|
id:ShortIdString,
|
|
name_v:integer,
|
|
v:integer,
|
|
items:[
|
|
id: ShortIdString or empty if new and not assigned an id yet,
|
|
completed: bool,
|
|
text:,
|
|
v:incrementing_long,
|
|
priority:[int 0-3]
|
|
|
|
]
|
|
]
|
|
}
|
|
|
|
|
|
https://github.com/tastejs/todomvc/blob/gh-pages/examples/jquery/js/app.js
|
|
https://github.com/tastejs/todomvc/blob/master/examples/jquery/index.html
|
|
|
|
|