diff options
Diffstat (limited to 'lib/server')
| -rw-r--r-- | lib/server/index.js | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/lib/server/index.js b/lib/server/index.js index 5069478..5b1150c 100644 --- a/lib/server/index.js +++ b/lib/server/index.js @@ -35,7 +35,9 @@ site.init = function(bridge){ }) const api_files = crud(app, 'file', db.File) const api_jobs = crud(app, 'job', db.Job) - const api_tasks = crud(app, 'task', db.Task) + const api_tasks = crud(app, 'task', db.Task, { + hasOne: { content_file_id: db.File, style_file_id: db.File } + }) app.get('/devices', (req, res) => { res.json( bridge.devices ) @@ -91,7 +93,41 @@ site.init = function(bridge){ app.get(type, (req, res) => { console.log('index', type) crud.index(req.query).then( (data) => { - res.json(data ? data.toJSON() : []) + + if (! callbacks.hasOne) { + res.json(data ? data.toJSON() : []) + } + else { + let recs = data.toJSON() + const loader = new Loader () + loader.onReady( () => { + console.log(type, 'ready') + res.json(recs) + }) + console.log('hasOne') + loader.register('hasOne') + Object.keys(callbacks.hasOne).forEach( (key,i) => { + loader.register(key) + console.log('key') + const type = callbacks.hasOne[key] + const id_lookup = {} + recs.forEach(r => { + const id = r[key] + id_lookup[id] = id_lookup[id] || [] + id_lookup[id].push(r) + }) + console.log(key, recs.length, Object.keys(id_lookup).length) + db.crud(type).show_ids(Object.keys(id_lookup)).then( (sub_recs) => { + console.log(key, 'sub_recs', sub_recs) + const short_key = key.replace('_id','') + sub_recs.toJSON().forEach(rec => { + id_lookup[rec.id].forEach( parent_rec => parent_rec[short_key] = rec ) + }) + loader.ready(key) + }) + }) + loader.ready('hasOne') + } }) // }).catch( () => res.sendStatus(500) ) }) @@ -99,7 +135,26 @@ site.init = function(bridge){ app.get(type_id, (req, res) => { console.log('show', type, req.params.id) crud.show(req.params.id).then( (data) => { - res.json(data.toJSON()) + if (! callbacks.hasOne) { + res.json(data.toJSON()) + } + else { + rec = data.toJSON() + const loader = new Loader () + loader.onReady( () => { + res.json(rec) + }) + loader.register('hasOne') + Object.keys(callbacks.hasOne).forEach( (key,i) => { + loader.register(key) + const type = callbacks.hasOne[key] + db.crud(type).show(rec[key]).then( (sub_rec) => { + rec[key] = sub_rec + loader.ready(key) + }) + }) + loader.ready('hasOne') + } }) // .catch( (err) => res.sendStatus(500) ) }) |
