var fetch = require('fetch') var db = require('../db') module.exports = { route: (app) => { app.put('/raw/import/thread/', importRaw(db.Thread), (req, res) => res.send({ status: 'ok' })) app.put('/raw/import/keyword/', importRaw(db.Keyword), (req, res) => res.send({ status: 'ok' })) app.put('/raw/import/file/', importRaw(db.File), (req, res) => res.send({ status: 'ok' })) app.put('/raw/import/comment/', importRaw(db.Comment), (req, res) => res.send({ status: 'ok' })) app.get('/raw/export/thread/:id', exportThread, (req, res) => res.send({ status: 'ok' })) app.get('/raw/export/keyword/:id', exportKeyword, (req, res) => res.send({ status: 'ok' })) function importRaw (model) { return (req, res, next) => { new model(req.body).save().then((el) => { res.el = el; next() }) } } function exportKeyword (req, res, next) { db.getKeyword(req.params.keyword).then(keyword => { send("keyword", keyword) return db.getThreadsForKeyword(keyword) }).then(threads => { var promises = threads.map(thread => { exportThread({ params: { id: thread.get('id') } }, res, function(){}) }) return Promise.all(promises) }).then( () => { next() }) } function exportThread (req, res, next) { return db.getThread(req.params.id).then(thread => { send("thread", thread) return db.getCommentsForThread(req.params.id) }).then(comments => { var promises = comments.map(comment => send("comment", comment)) return Promise.all(promises) }).then( () => { return db.getFilesForThread(req.params.id) }).then(files => { var promises = files.map(comment => send("comment", comment)) return promises }).then( () => { next() }) } function send(type, data){ var json = data.toJSON() fetch("https://bucky.asdf.us/raw/import/" + type, { method: 'PUT', }).then(() => {}) } } }