diff --git a/.gitignore b/.gitignore index 073ae64..9e307b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ .env .DS_Store -./db/*.db +./db/posm-paths.sqlite3 +./testData/danbjoseph +.python_version +.vscode node_modules diff --git a/adapters/sequence/helpers.js b/adapters/sequence/helpers.js index 994f983..d452c18 100644 --- a/adapters/sequence/helpers.js +++ b/adapters/sequence/helpers.js @@ -41,4 +41,10 @@ exports.calcDelta = (metaDate, nextMetaDate) => nextMetaDate.diff(metaDate) / 10 * @param {array} sequence sequence to be added to sequenceMap * @return {object} updated sequenceMap */ -exports.addSequence = (sequenceMap, sequence) => { sequenceMap[uuidv4()] = sequence; return sequenceMap }; \ No newline at end of file +exports.addSequence = (sequences, sequence) => { + sequences.push({ + sequenceId: uuidv4(), + sequence: sequence + }) + return sequences; +}; \ No newline at end of file diff --git a/adapters/sequence/index.js b/adapters/sequence/index.js index 5987b49..490866c 100644 --- a/adapters/sequence/index.js +++ b/adapters/sequence/index.js @@ -12,12 +12,13 @@ Promise = require('bluebird') * @param {array} paths list of directory paths holding images to make sequences of * @param {number} maxCutDist maximum distance allowed between two photos * @param {number} minCutDist minimum distance allowed between two photos - * @param {cutTime} cutTime maximum time between two images - * @param {cutSize} cutSize maximum size of a sequence. + * @param {number} cutTime maximum time between two images + * @param {number} cutSize maximum size of a sequence. + * @param {string} userId (optional) userId that when present attached to each sequence * @return {array} array of sequence configuration objects */ -module.exports = (paths, minCutDist, maxCutDist, maxDelta, sequenceSize) => { +module.exports = (paths, minCutDist, maxCutDist, maxDelta, sequenceSize, userId) => { return new Promise((resolve, reject) => { Promise.map(paths, async (p) => { const images = await fs.readdir(p); @@ -26,12 +27,19 @@ module.exports = (paths, minCutDist, maxCutDist, maxDelta, sequenceSize) => { .then(async (images) => { try { const params = { - maxDist: maxCutDist, - minDist: minCutDist, - maxDelta: maxDelta, - size: sequenceSize - }, - sequences = await buildSequences(flatten(images), params); + maxDist: maxCutDist, + minDist: minCutDist, + maxDelta: maxDelta, + size: sequenceSize + }; + + let sequences = await buildSequences(flatten(images), params); + if (userId) { + sequences = sequences.map(sequence => { + sequence.userId = userId + return sequence + }); + } resolve(sequences); } catch (e) { diff --git a/adapters/sequence/split.js b/adapters/sequence/split.js index df318d0..f253aed 100644 --- a/adapters/sequence/split.js +++ b/adapters/sequence/split.js @@ -21,7 +21,7 @@ Promise = require('bluebird'); module.exports = (metas, params) => { const sortedMetas = metas.sort((a, b) => a.timestamp - b.timestamp), pelIndex = sortedMetas.length - 2, - sequences = {}, + sequences = [], maxDist = params.maxDist, maxDelta = params.maxDelta, maxSize = params.maxSize, diff --git a/handlers/sequence/helpers.js b/handlers/sequence/helpers.js index cdfe417..e3571f9 100644 --- a/handlers/sequence/helpers.js +++ b/handlers/sequence/helpers.js @@ -3,11 +3,11 @@ /** * Provided parameters for a sequence and its images, * inserts images into the image table - * @param {String} sequenceId sequence uuid * @param {Array} sequence list of sequence images - * @param {String} userId user uuid */ -exports.insertImages = (sequenceId, sequence, userId) => { +exports.insertImages = (sequence) => { + const sequenceId = sequence.sequenceId, + userId = sequence.userId; Promise.map(sequence, image => { return `(${image.id}, ${image.image}, ${image.timestamp}, ${sequenceId}, ${userId}, ${loc}),` }) @@ -29,11 +29,12 @@ exports.insertImages = (sequenceId, sequence, userId) => { /** * Provided parameters for a sequence record, * inserts sequence into Sequences table - * @param {String} sequenceId sequence uuid * @param {Array} sequence list of sequence images - * @param {String} userId user uuid */ -exports.insertSequence = (sequenceId, sequence, userId) => { +exports.insertSequence = (sequence) => { + const sequenceId = sequence.sequenceId, + userId = sequence.userId; + Promise.map(sequence, image => { return { id : image.id, loc: image.loc }}) .then(async (sequenceImages) => { try { diff --git a/handlers/sequence/post.js b/handlers/sequence/post.js index 02b983e..1e3a4bf 100644 --- a/handlers/sequence/post.js +++ b/handlers/sequence/post.js @@ -3,36 +3,36 @@ const Boom = require('boom'); const db = require('../../connection'); const uuidv4 = require('uuid/v4'); -const insertImages = require('./helpers').insertImages; -const insertSequence = require('./helpers').insertSequence; +const buildSequences = require('../../adapters/sequence'); +// const insertImages = require('./helpers').insertImages; +// const insertSequence = require('./helpers').insertSequence; module.exports = async (r, h) => { try { const paths = r.payload, - userId = r.params.user, + user = r.query.userId, minCutDist = r.params.minDist || 0.5, maxCutDist = r.params.maxDist || 300, maxDelta = r.params.maxDelta || 120, sequenceSize = r.params.size || 0, - sequences = await buildSequences(paths, minCutDist, maxCutDist, maxDelta, sequenceSize); + sequences = await buildSequences(paths, minCutDist, maxCutDist, maxDelta, sequenceSize, userId); sequences.forEach(async (sequence) => { try { - const sequenceId = uuidv4(); - console.log(sequenceId); - return {} - // await Promise.map([insertImages, insertSequence], async (builder) => { - // try { - // await builder(sequenceId, sequence, userId); - // } catch (e) { - // throw e; - // } - // }) + await Promise.map([insertImages, insertSequence], async (builder) => { + try { + await builder(sequence); + } catch (e) { + throw e; + } + }) } catch (e) { throw e; } }) + return h.response({ upload: 'successful' }).code(200); + } catch (error) { return Boom.badImplementation(error.message); } diff --git a/test/sequence/handler.js b/test/sequence/handler.js index eff4c45..5d794ed 100644 --- a/test/sequence/handler.js +++ b/test/sequence/handler.js @@ -1,30 +1,45 @@ -// 'use strict'; +'use strict'; -// const Joi = require('joi'); -// const chai = require('chai'); -// const expect = chai.expect; -// const server = require('../server'); -// const mergeDefaults = require('../helpers').mergeDefaults; -// const routes = [ -// require('../../routes/sequence').post -// ]; +const Joi = require('joi'); +const chai = require('chai'); +const expect = chai.expect; -// before(async () => await server.liftOff(routes)) -// describe('post', () => { - // it('replies 200 when successful creating/inserting image sequences', async () => { - // try { - // const request = mergeDefaults({ - // method: 'POST', - // payload: require('../../testData/payloads.json').postSequence, - // url:'/sequence' - // }), - // r = await server.inject(request), - // statusCode = r.statusCode; - - // expect(statusCode).to.equal(202); - // } catch (error) { - // console.error(error); +const uuidv4 = require('uuid/v4'); - // } - // }) -// }) +const server = require('../server'); +const mergeDefaults = require('../helpers').mergeDefaults; +const oldUserPayload = require('../../testData/payloads').postUser; +const routes = [ + // require('../../routes/sequence').get, + require('../../routes/sequence').post +]; + +before(async () => await server.liftOff(routes)) +describe('post', () => { + it('replies 200 when sequence post is successful', async () => { + try { + const request = mergeDefaults({ + method: 'POST', + payload: ['/testData/danbjoseph'].map(p => process.cwd() + p), + url: '/sequence?userId=6cc99b2f-a00a-45c3-a74b-d532547dd852' + }), + r = await server.inject(request), + statusCode = r.statusCode; + + + expect(statusCode).to.be.eql(200); + + } catch (error) { + console.error(error); + + } + }) +// it('replies 400 when unsuccessful because user already in db', async () => { +// }) +}) +// describe('get', () => { +// it ('replies 200 and username when given valid uuid', async () => { +// }) +// it ('replies 400 when given user id invalid', async () => { +// }) +// }) \ No newline at end of file diff --git a/test/user/handler.js b/test/user/handler.js index 42d3e36..88de1cd 100644 --- a/test/user/handler.js +++ b/test/user/handler.js @@ -26,6 +26,7 @@ describe('post', () => { for (let i = 0; i < 5; i++) { fakeName += letters.charAt(Math.floor(Math.random() * letters.length)); } + const request = mergeDefaults({ method: 'POST', payload: { name: fakeName },