This commit is contained in:
107
notes/algorithm
Normal file
107
notes/algorithm
Normal file
@@ -0,0 +1,107 @@
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user