diff --git a/index.js b/index.js index 85f6338..bf262c9 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,9 @@ let app = express(); let addRequestId = require('./libs/express-request-id')(); let multer = require('multer'); +let taskManager = new (require('./libs/taskManager'))(); +let Task = require('./libs/Task'); + app.use(express.static('public')); let upload = multer({ @@ -30,12 +33,27 @@ let upload = multer({ }); app.post('/newTask', addRequestId, upload.array('images'), (req, res, next) => { - console.log(`Received ${req.files.length} files`); - if (req.files.length){ + if (req.files.length === 0) res.json({error: "Need at least 1 file."}); + else{ + console.log(`Received ${req.files.length} files`); + // Move to data + fs.rename(`tmp/${req.id}`, `data/${req.id}`, (err) => { + if (!err){ + taskManager.addNew(new Task(req.id, req.body.name)); + res.json({uuid: req.id, success: true}); + }else{ + res.json({error: "Could not move images folder."}); + } + }); } - console.log("Name: " + req.body.name); - res.json({uuid: req.id, success: true}); +}); + +app.get('/taskInfo/:uuid', (req, res, next) => { + let task = taskManager.find(req.params.uuid); + if (task){ + res.json(task.getInfo()); + }else res.json({error: `${req.params.uuid} not found`}); }); app.listen(3000, () => { diff --git a/libs/Task.js b/libs/Task.js new file mode 100644 index 0000000..e185eaf --- /dev/null +++ b/libs/Task.js @@ -0,0 +1,33 @@ +"use strict"; +let assert = require('assert'); + +let statusCodes = { + QUEUED: 10, + RUNNING: 20, + FAILED: 30, + COMPLETED: 40 +}; + +module.exports = class Task{ + constructor(uuid, name){ + assert(uuid !== undefined, "uuid must be set"); + + this.uuid = uuid; + this.name = name != "" ? name : "Task of " + (new Date()).toISOString(); + this.dateCreated = new Date().getTime(); + this.status = { + code: statusCodes.QUEUED + }; + this.options = {}; + } + + getInfo(){ + return { + uuid: this.uuid, + name: this.name, + dateCreated: this.dateCreated, + status: this.status, + options: this.options + } + } +}; \ No newline at end of file diff --git a/libs/TaskManager.js b/libs/TaskManager.js new file mode 100644 index 0000000..42c76e7 --- /dev/null +++ b/libs/TaskManager.js @@ -0,0 +1,18 @@ +"use strict"; +let assert = require('assert'); +let Task = require('./Task'); + +module.exports = class TaskManager{ + constructor(){ + this.tasks = {}; + } + + addNew(task){ + assert(task.constructor.name === "Task", "Must be a Task object"); + this.tasks[task.uuid] = task; + } + + find(uuid){ + return this.tasks[uuid]; + } +}; \ No newline at end of file diff --git a/public/css/main.css b/public/css/main.css index 88d7fa1..7cb8d62 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -1,3 +1,39 @@ .row:first-child{ margin-top: 30px; +} + +.task{ + border: 1px solid #ecf0f1; + padding: 8px; + position: relative; + margin-bottom: 16px; +} + +.task .statusIcon{ + position: absolute; + right: 8px; + top: 8px; +} + +.spinning{ + -webkit-animation: spin 3s infinite linear; + -moz-animation: spin 3s infinite linear; + animation: spin 3s infinite linear; +} + +@-moz-keyframes spin { + from { -moz-transform: rotate(0deg); } + to { -moz-transform: rotate(360deg); } +} +@-webkit-keyframes spin { + from { -webkit-transform: rotate(0deg); } + to { -webkit-transform: rotate(360deg); } +} +@keyframes spin { + from {transform:rotate(0deg);} + to {transform:rotate(360deg);} +} + +.task .actionButtons{ + text-align: right; } \ No newline at end of file diff --git a/public/index.html b/public/index.html index 4373d3a..dd2b889 100644 --- a/public/index.html +++ b/public/index.html @@ -3,7 +3,7 @@
-