summaryrefslogtreecommitdiff
path: root/lib/server
diff options
context:
space:
mode:
Diffstat (limited to 'lib/server')
-rw-r--r--lib/server/index.js61
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) )
})