summaryrefslogtreecommitdiff
path: root/lib/server/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/server/index.js')
-rw-r--r--lib/server/index.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/lib/server/index.js b/lib/server/index.js
new file mode 100644
index 0000000..d062131
--- /dev/null
+++ b/lib/server/index.js
@@ -0,0 +1,116 @@
+var fs = require('fs')
+var app, express = require('express')
+var http = require('http')
+var bodyParser = require('body-parser')
+var path = require('path')
+
+var multer = require('multer')
+var upload = multer({ dest: 'uploads/' })
+
+var app, server
+
+const db = require('../db')
+
+var site = module.exports = {}
+
+site.init = function(bridge){
+ app = express()
+ app.use(express.static(path.join(__dirname, './public')))
+ app.use(bodyParser.json())
+ app.use(bodyParser.urlencoded({ extended: false }))
+
+ app.use(express.query())
+
+ server = http.createServer(app).listen(process.env.PORT, function () {
+ console.log('Cortex listening at http://localhost:%s', server.address().port)
+ })
+
+ const api_folders = crud(app, 'folder', db.Folder, {
+ afterCreate: (folder) => {
+ fs.mkdir('public/data/' + folder.id + '/', function(){
+ console.log('created folder', folder.id, folder.name)
+ })
+ }
+ })
+ const api_files = crud(app, 'file', db.File)
+ const api_jobs = crud(app, 'job', db.Job)
+ const api_tasks = crud(app, 'task', db.Task)
+
+ app.post('/folders/:id', upload.array('file'), function(req, res){
+ if ( ! req.files ) return;
+ let loaded = {};
+ ( req.files || [] ).forEach( (file) => {
+ loaded[file.filename] = false
+ const fn = file.originalname
+ fs.rename(file.path, 'public/data/' + req.params.id + '/' + fn, function(err){
+ api_files.create({
+ // table.string('username')
+ 'folder_id': req.params.id,
+ 'name': fn,
+ 'size': file.size,
+ 'generated': false,
+ 'processed': false,
+ }).then( (file) => {
+ loaded[file.filename] = file.toJSON()
+ if (Object.keys(loaded).some( el => !! el )) {
+ res.json( Object.keys(loaded).map(k=>loaded[k]).sort((a,b) => { b.id - a.id }) )
+ }
+ }).catch( (err) => {
+ console.warn(err)
+ res.sendStatus(500)
+ })
+ })
+ })
+ })
+
+ function crud(app, type_s, model, callbacks){
+ callbacks = callbacks || {}
+ const type = '/' + type_s + 's/'
+ const type_id = type + ':id'
+
+ const crud = db.crud(type_s, model)
+
+ // index
+ app.get(type, (req, res) => {
+ console.log('index', type)
+ crud.index(req.query).then( (data) => {
+ res.json(data ? data.toJSON() : [])
+ }) // }).catch( () => res.sendStatus(500) )
+ })
+
+ // show
+ app.get(type_id, (req, res) => {
+ console.log('show', type, req.params.id)
+ crud.show(req.params.id).then( (data) => {
+ res.json(data.toJSON())
+ }) // .catch( (err) => res.sendStatus(500) )
+ })
+
+ // create
+ app.post(type, (req, res) => {
+ console.log('create', type)
+ crud.create(req.body).then( (data) => {
+ res.json(data.toJSON())
+ callbacks.afterCreate && callbacks.afterCreate(data.toJSON())
+ })// .catch( () => res.sendStatus(500) )
+ })
+
+ // update
+ app.put(type_id, (req, res) => {
+ console.log('update', type, req.params.id)
+ crud.update(req.body.id, req.body).then( (data) => {
+ res.json(data.toJSON())
+ })// .catch( () => res.sendStatus(500) )
+ })
+
+ // destroy
+ app.delete(type_id, (req, res) => {
+ console.log('destroy', type, req.params.id)
+ crud.destroy(req.params.id).then( (data) => {
+ res.json(data.toJSON())
+ })// .catch( () => res.sendStatus(500) )
+ })
+
+ return crud
+ }
+}