diff --git a/client/src/app/components/molecules/PrincipalContent/ImageContainer/Image/Image.js b/client/src/app/components/molecules/PrincipalContent/ImageContainer/Image/Image.js index cb7d97e..d1287ce 100644 --- a/client/src/app/components/molecules/PrincipalContent/ImageContainer/Image/Image.js +++ b/client/src/app/components/molecules/PrincipalContent/ImageContainer/Image/Image.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useState, useEffect} from 'react'; import PropTypes from 'prop-types'; import {connect} from 'react-redux' @@ -26,22 +26,39 @@ const useStyles = makeStyles({ const Image = props => { const image = props.image const classes = useStyles() + const [img, setImg] = useState('') + useEffect(() => { + var base64Flag = 'data:image/jpeg;base64,'; + var imageStr = arrayBufferToBase64(image.img.data.data); + const img = base64Flag + imageStr + image.img.imageUrl = img + setImg(img) + }) + + const arrayBufferToBase64 = (buffer) => { + var binary = ''; + var bytes = [].slice.call(new Uint8Array(buffer)); + bytes.forEach((b) => binary += String.fromCharCode(b)); + return window.btoa(binary); + }; + + console.log(img) return ( - props.updateBackgroundDispatcher(image.imageUrl)}> - } title={image.imageTitle} style={{textTransform: 'capitalize'}} /> + props.updateBackgroundDispatcher(img)}> + } title={image.img.name} style={{textTransform: 'capitalize'}} /> - {image.imageTitle} + {image.img.name} - {image.imageDescription} + {image.img.description} diff --git a/client/src/app/components/molecules/PrincipalContent/ImageContainer/ImageContainer.js b/client/src/app/components/molecules/PrincipalContent/ImageContainer/ImageContainer.js index 40e2cf0..3bc68cf 100644 --- a/client/src/app/components/molecules/PrincipalContent/ImageContainer/ImageContainer.js +++ b/client/src/app/components/molecules/PrincipalContent/ImageContainer/ImageContainer.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import {connect} from 'react-redux' -import {createGetSelector} from 'reselect-immutable-helpers' +import {createPropsSelector} from 'reselect-immutable-helpers' import {getImages} from './../../../../pages/Home/selectors' import ImageCard from './Image' import Image from './../../../../models/image.model' @@ -9,26 +9,8 @@ import Image from './../../../../models/image.model' class ImageContainer extends React.Component { render() { - // const images = [ - // new Image('dragonfly1', '/images/GUD_1.JPG', 'Guddu 1'), - // new Image('dragonfly2', '/images/GUD_2.JPG', 'sampleDesc2'), - // new Image('dragonfly3', '/images/GUD_3.JPG', 'sampleDesc3'), - // new Image('dragonfly4', '/images/GUD_4.JPG', 'sampleDesc4'), - // new Image('dragonfly1', '/images/GUD_5.JPG', 'sampleDesc1'), - // new Image('dragonfly2', '/images/GUD_6.JPG', 'sampleDesc2'), - // new Image('dragonfly3', '/images/GUD_7.JPG', 'sampleDesc3'), - // new Image('dragonfly4', '/images/GUD_8.JPG', 'sampleDesc4'), - // new Image('dragonfly1', '/images/GUD_9.JPG', 'sampleDesc1'), - // new Image('dragonfly2', '/images/GUD_10.JPG', 'sampleDesc2'), - // new Image('dragonfly3', '/images/GUD_11.JPG', 'sampleDesc3'), - // new Image('dragonfly4', '/images/GUD_12.JPG', 'sampleDesc4'), - // new Image('dragonfly1', '/images/GUD_4.JPG', 'sampleDesc1'), - // new Image('dragonfly2', '/images/GUD_3.JPG', 'sampleDesc2'), - // new Image('dragonfly3', '/images/GUD_2.JPG', 'sampleDesc3'), - // new Image('dragonfly4', '/images/GUD_1.JPG', 'sampleDesc4') - // ] const {images} = this.props - const imageRenders = images.map((image, index) => { + const imageRenders = images && images.map((image, index) => { return }) return ( @@ -45,7 +27,7 @@ ImageContainer.propTypes = { images: PropTypes.array }; -const mapStateToProps = createGetSelector({ +const mapStateToProps = createPropsSelector({ images: getImages }) diff --git a/client/src/app/components/molecules/common/Uploader/Uploader.js b/client/src/app/components/molecules/common/Uploader/Uploader.js index 8db6c30..4b8620d 100644 --- a/client/src/app/components/molecules/common/Uploader/Uploader.js +++ b/client/src/app/components/molecules/common/Uploader/Uploader.js @@ -95,9 +95,7 @@ class Uploader extends React.Component { this.state.files.forEach((file) => { this.compress(file).then((result) => { this.setState({ uploadProgress: {}, uploading: true }); - // result.forEach((file) => { this.upload(result) - // }) }) }) } @@ -143,9 +141,7 @@ class Uploader extends React.Component { async upload(files) { this.setState({ uploadProgress: {}, uploading: true }); const promises = []; - // this.state.files.forEach(file => { promises.push(this.sendRequest(files)); - // }); try { await Promise.all(promises).then(result => console.log('result === ' + result)).catch(err => console.log('error === ' + err)); this.setState({ successfullUploaded: true, uploading: false }); diff --git a/client/src/app/pages/Home/Home.jsx b/client/src/app/pages/Home/Home.jsx index 97be4fe..8ea5318 100644 --- a/client/src/app/pages/Home/Home.jsx +++ b/client/src/app/pages/Home/Home.jsx @@ -4,7 +4,7 @@ import {connect} from 'react-redux' import {createPropsSelector} from 'reselect-immutable-helpers' import * as actions from './actions' -import {getBackgroundImage, getHome} from './selectors' +import {getBackgroundImage} from './selectors' import Sidebar from '../../components/molecules/SideBar' import CommandPrompt from '../../components/molecules/common/CommandPrompt' @@ -37,13 +37,11 @@ class Home extends React.Component { Home.propTypes = { backgroundImage: PropTypes.string, - initializeHome: PropTypes.func, - dataState: PropTypes.object + initializeHome: PropTypes.func } const mapStateToProps = createPropsSelector({ - backgroundImage: getBackgroundImage, - dataState: getHome + backgroundImage: getBackgroundImage }) const mapDispatchToProps = { diff --git a/client/src/app/pages/Home/actions.js b/client/src/app/pages/Home/actions.js index 041a4bf..60e2ec5 100644 --- a/client/src/app/pages/Home/actions.js +++ b/client/src/app/pages/Home/actions.js @@ -17,8 +17,9 @@ export const initializeHome = () => (dispatch) => { // .then(() => ({statusCode: 200})) // .catch((err) => ({statusCode: err.statusCode || 500})) ds.getFeaturedImages().then(res => { + // console.log(res) dispatch(saveRetrievedImages(res)) - }) + }).catch(err => console.log(err)) } export const saveRetrievedImages = (images) => { diff --git a/client/src/app/services/data.service.ts b/client/src/app/services/data.service.ts index 481c97b..87719a2 100644 --- a/client/src/app/services/data.service.ts +++ b/client/src/app/services/data.service.ts @@ -3,8 +3,12 @@ export default class DataService { constructor() { } getFeaturedImages() { - fetch('/images/featured') - .then(res => res.json()) + return fetch('/images/nature') + .then(res => { + // console.log(res) + // console.log(res.json()) + return res.json() + }) .catch(err => console.log(err)) } } diff --git a/server/dbManager/mongoIO.js b/server/dbManager/mongoIO.js new file mode 100644 index 0000000..85b3b08 --- /dev/null +++ b/server/dbManager/mongoIO.js @@ -0,0 +1,65 @@ +const fs = require('fs'); +const mongoose = require('mongoose'); +const Image = require('./../models/Image.model') +const Schema = mongoose.Schema; + +mongoose.connect('mongodb+srv://mohiit1502:astalavista2402@cluster-ecstatica-base-adspg.mongodb.net/ecstatica?retryWrites=true&w=majority') +// const MongoClient = require('mongodb').MongoClient; + +// const uri = "mongodb+srv://mohiit1502:astalavista2402@cluster-ecstatica-base-adspg.mongodb.net/test?retryWrites=true&w=majority"; +// const client = new MongoClient(uri, { useNewUrlParser: true }); +// client.connect(err => { +// const collection = client.db("test").collection("devices"); +// // perform actions on the collection object +// client.close(); +// }); + +module.exports = { + save: function(req, res) { + var files = req.files + var filesOrganized = {} + files && files.forEach((file) => { + var fileName + if (file.originalname.includes('compressed_20')) { + fileName = file.originalname.substring(0, file.originalname.indexOf('_compressed')); + file.name = fileName; + filesOrganized[fileName] = {...filesOrganized[fileName], compressed_20: file} + } else if (file.originalname.includes('compressed_60')) { + fileName = file.originalname.substring(0, file.originalname.indexOf('_compressed')); + file.name = fileName; + filesOrganized[fileName] = {...filesOrganized[fileName], compressed_60: file} + } else { + fileName = file.originalname.substring(0, file.originalname.indexOf('.')); + file.name = fileName; + filesOrganized[fileName] = {...filesOrganized[fileName], standard: file} + } + }) + filesOrganized && Object.keys(filesOrganized).forEach((fileName) => { + var fileVariants = filesOrganized[fileName] + var timestamp = Date.now(); + + Object.keys(fileVariants).forEach((fileVariantKey) => { + var fileVariant = fileVariants[fileVariantKey]; + var new_img = new Image + new_img.img.identifier = timestamp; + new_img.img.variant = fileVariantKey; + new_img.img.name = fileVariant.name + new_img.img.data = fs.readFileSync(fileVariants[fileVariantKey].path) + new_img.img.tags.push('nature') + new_img.img.contentType = 'image/jpeg'; + new_img.save(); + }) + }) + return res.json({ message: 'New image and its variants added to the db!' }); + }, + find: function(req, res) { + // return Image.findOne({}, 'img createdAt', function(err, img) { + Image.find({'img.variant': 'compressed_20', 'img.tags': 'nature'}, 'img createdAt', function(err, img) { + if (err) + res.send(err); + // console.log('images === ' + img); + res.contentType('json'); + res.send(img); + }).sort({ createdAt: 'desc' }); + } +} \ No newline at end of file diff --git a/server/filesManager/download.js b/server/filesManager/download.js index aa85b94..b011a46 100644 --- a/server/filesManager/download.js +++ b/server/filesManager/download.js @@ -2,7 +2,7 @@ const fs = require('fs') var path = require('path'); var multer = require('multer'); -var EXTENSION = '.txt'; +var EXTENSION = '.jpg'; var storage = multer.diskStorage({ destination: function (req, file, cb) { @@ -14,17 +14,33 @@ var storage = multer.diskStorage({ }) var download = () => { - var dirpath = './../image_uploads/' - fs.readdir(dirpath, function(err, files) { - files.forEach(file => { - console.log(file.originalname) - }) - var targetFiles = files.filter(function(file) { - return path.extname(file).toLowerCase() === EXTENSION; - }); - targetFiles.forEach(file => { - console.log(file.originalname) - }) + var dirpath = path.resolve(process.cwd(), './image_uploads/') + return new Promise((resolve, reject) => { + try { + fs.readdir(dirpath, function(err, fileNames) { + var targetFileNames = fileNames.filter(function(fileName) { + const namePart = fileName.split('.')[0] + return (path.extname(fileName).toLowerCase() === EXTENSION) && namePart.endsWith('compressed_20') + }); + const files = targetFileNames && targetFileNames.map(targetFileName => { + filepath = dirpath + '/' + targetFileName; + return new Promise((resolve, reject) => { + fs.readFile(filepath, 'utf8', (err, data) => { + if (err) reject(err) + else resolve(data) + }) + }) + }) + Promise.all(files).then(fileStream => { + // console.log(fileStream) + resolve(fileStream) + }).catch(error => { + reject(error) + }); + }) + } catch(err) { + reject(err) + } }) } diff --git a/server/image_uploads/1572986416293-GUD_11.JPG b/server/image_uploads/1572986416293-GUD_11.JPG deleted file mode 100644 index edff032..0000000 Binary files a/server/image_uploads/1572986416293-GUD_11.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416295-GUD_8.JPG b/server/image_uploads/1572986416295-GUD_8.JPG deleted file mode 100644 index 731d4eb..0000000 Binary files a/server/image_uploads/1572986416295-GUD_8.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416339-GUD_9.JPG b/server/image_uploads/1572986416339-GUD_9.JPG deleted file mode 100644 index 45615b5..0000000 Binary files a/server/image_uploads/1572986416339-GUD_9.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416357-GUD_10.JPG b/server/image_uploads/1572986416357-GUD_10.JPG deleted file mode 100644 index 3113d00..0000000 Binary files a/server/image_uploads/1572986416357-GUD_10.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416376-GUD_11_compressed_20.JPG b/server/image_uploads/1572986416376-GUD_11_compressed_20.JPG deleted file mode 100644 index 3c0c76e..0000000 Binary files a/server/image_uploads/1572986416376-GUD_11_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416376-GUD_11_compressed_60.JPG b/server/image_uploads/1572986416376-GUD_11_compressed_60.JPG deleted file mode 100644 index 5f43e0e..0000000 Binary files a/server/image_uploads/1572986416376-GUD_11_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416384-GUD_12.JPG b/server/image_uploads/1572986416384-GUD_12.JPG deleted file mode 100644 index 6864f31..0000000 Binary files a/server/image_uploads/1572986416384-GUD_12.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416394-GUD_8_compressed_60.JPG b/server/image_uploads/1572986416394-GUD_8_compressed_60.JPG deleted file mode 100644 index fa30ea7..0000000 Binary files a/server/image_uploads/1572986416394-GUD_8_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416395-GUD_8_compressed_20.JPG b/server/image_uploads/1572986416395-GUD_8_compressed_20.JPG deleted file mode 100644 index 0b7efde..0000000 Binary files a/server/image_uploads/1572986416395-GUD_8_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416459-GUD_1.JPG b/server/image_uploads/1572986416459-GUD_1.JPG deleted file mode 100644 index 87fcda3..0000000 Binary files a/server/image_uploads/1572986416459-GUD_1.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416484-GUD_9_compressed_20.JPG b/server/image_uploads/1572986416484-GUD_9_compressed_20.JPG deleted file mode 100644 index d50a4e6..0000000 Binary files a/server/image_uploads/1572986416484-GUD_9_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416484-GUD_9_compressed_60.JPG b/server/image_uploads/1572986416484-GUD_9_compressed_60.JPG deleted file mode 100644 index 4d2fea2..0000000 Binary files a/server/image_uploads/1572986416484-GUD_9_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416493-GUD_10_compressed_60.JPG b/server/image_uploads/1572986416493-GUD_10_compressed_60.JPG deleted file mode 100644 index 6178d66..0000000 Binary files a/server/image_uploads/1572986416493-GUD_10_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416495-GUD_10_compressed_20.JPG b/server/image_uploads/1572986416495-GUD_10_compressed_20.JPG deleted file mode 100644 index 6b3da83..0000000 Binary files a/server/image_uploads/1572986416495-GUD_10_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416510-GUD_5.JPG b/server/image_uploads/1572986416510-GUD_5.JPG deleted file mode 100644 index 1d9b812..0000000 Binary files a/server/image_uploads/1572986416510-GUD_5.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416548-GUD_12_compressed_60.JPG b/server/image_uploads/1572986416548-GUD_12_compressed_60.JPG deleted file mode 100644 index 91a045f..0000000 Binary files a/server/image_uploads/1572986416548-GUD_12_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416549-GUD_12_compressed_20.JPG b/server/image_uploads/1572986416549-GUD_12_compressed_20.JPG deleted file mode 100644 index 8d14f88..0000000 Binary files a/server/image_uploads/1572986416549-GUD_12_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416588-GUD_1_compressed_60.JPG b/server/image_uploads/1572986416588-GUD_1_compressed_60.JPG deleted file mode 100644 index e26b9c1..0000000 Binary files a/server/image_uploads/1572986416588-GUD_1_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416589-GUD_1_compressed_20.JPG b/server/image_uploads/1572986416589-GUD_1_compressed_20.JPG deleted file mode 100644 index 9690cd1..0000000 Binary files a/server/image_uploads/1572986416589-GUD_1_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416653-GUD_3.JPG b/server/image_uploads/1572986416653-GUD_3.JPG deleted file mode 100644 index 889d73d..0000000 Binary files a/server/image_uploads/1572986416653-GUD_3.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416682-GUD_5_compressed_60.JPG b/server/image_uploads/1572986416682-GUD_5_compressed_60.JPG deleted file mode 100644 index fc910c2..0000000 Binary files a/server/image_uploads/1572986416682-GUD_5_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416703-GUD_5_compressed_20.JPG b/server/image_uploads/1572986416703-GUD_5_compressed_20.JPG deleted file mode 100644 index be44176..0000000 Binary files a/server/image_uploads/1572986416703-GUD_5_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416894-GUD_3_compressed_60.JPG b/server/image_uploads/1572986416894-GUD_3_compressed_60.JPG deleted file mode 100644 index cd047c7..0000000 Binary files a/server/image_uploads/1572986416894-GUD_3_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416897-GUD_3_compressed_20.JPG b/server/image_uploads/1572986416897-GUD_3_compressed_20.JPG deleted file mode 100644 index 993bcce..0000000 Binary files a/server/image_uploads/1572986416897-GUD_3_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416935-GUD_6.JPG b/server/image_uploads/1572986416935-GUD_6.JPG deleted file mode 100644 index 9c0615d..0000000 Binary files a/server/image_uploads/1572986416935-GUD_6.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416995-GUD_6_compressed_60.JPG b/server/image_uploads/1572986416995-GUD_6_compressed_60.JPG deleted file mode 100644 index f00cd86..0000000 Binary files a/server/image_uploads/1572986416995-GUD_6_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986416997-GUD_6_compressed_20.JPG b/server/image_uploads/1572986416997-GUD_6_compressed_20.JPG deleted file mode 100644 index a2fc3c7..0000000 Binary files a/server/image_uploads/1572986416997-GUD_6_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417125-GUD_7.JPG b/server/image_uploads/1572986417125-GUD_7.JPG deleted file mode 100644 index b933aa9..0000000 Binary files a/server/image_uploads/1572986417125-GUD_7.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417193-GUD_4.JPG b/server/image_uploads/1572986417193-GUD_4.JPG deleted file mode 100644 index c8de3de..0000000 Binary files a/server/image_uploads/1572986417193-GUD_4.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417242-GUD_7_compressed_60.JPG b/server/image_uploads/1572986417242-GUD_7_compressed_60.JPG deleted file mode 100644 index fa9bd11..0000000 Binary files a/server/image_uploads/1572986417242-GUD_7_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417244-GUD_7_compressed_20.JPG b/server/image_uploads/1572986417244-GUD_7_compressed_20.JPG deleted file mode 100644 index 76a50fb..0000000 Binary files a/server/image_uploads/1572986417244-GUD_7_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417263-GUD_2.JPG b/server/image_uploads/1572986417263-GUD_2.JPG deleted file mode 100644 index d71e932..0000000 Binary files a/server/image_uploads/1572986417263-GUD_2.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417370-GUD_4_compressed_60.JPG b/server/image_uploads/1572986417370-GUD_4_compressed_60.JPG deleted file mode 100644 index cf8eb91..0000000 Binary files a/server/image_uploads/1572986417370-GUD_4_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417374-GUD_4_compressed_20.JPG b/server/image_uploads/1572986417374-GUD_4_compressed_20.JPG deleted file mode 100644 index d13983e..0000000 Binary files a/server/image_uploads/1572986417374-GUD_4_compressed_20.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417448-GUD_2_compressed_60.JPG b/server/image_uploads/1572986417448-GUD_2_compressed_60.JPG deleted file mode 100644 index fe45302..0000000 Binary files a/server/image_uploads/1572986417448-GUD_2_compressed_60.JPG and /dev/null differ diff --git a/server/image_uploads/1572986417451-GUD_2_compressed_20.JPG b/server/image_uploads/1572986417451-GUD_2_compressed_20.JPG deleted file mode 100644 index 65f01f0..0000000 Binary files a/server/image_uploads/1572986417451-GUD_2_compressed_20.JPG and /dev/null differ diff --git a/server/index.js b/server/index.js index c483c1e..4791e7d 100644 --- a/server/index.js +++ b/server/index.js @@ -5,6 +5,7 @@ const cors = require('cors') const upload = require('./filesManager/upload') const download = require('./filesManager/download') const multer = require('multer') +const mongoHandler = require('./dbManager/mongoIO') const app = express(); var corsOptions = {origin: '*', optionsSuccessStatus: 200,} @@ -13,7 +14,12 @@ app.use(cors(corsOptions)) app.use(bodyParser.urlencoded({ extended: false })); app.use(pino); -app.get('/images/:type', download) +app.get('/images/:type', (req, res) => { + // download() + // .then(result => res.status(200).send(result)) + // .catch(err => res.status(500).json(err)) + return mongoHandler.find(req, res) +}) app.post('/upload', (req, res) => { upload(req, res, err => { @@ -24,7 +30,8 @@ app.post('/upload', (req, res) => { console.log(err) return res.status(500).json(err) } - return res.status(200).send(req.file) + return mongoHandler.save(req, res) + // return res.status(200).send(req.file) }) }) diff --git a/server/models/Image.model.js b/server/models/Image.model.js new file mode 100644 index 0000000..00d0749 --- /dev/null +++ b/server/models/Image.model.js @@ -0,0 +1,17 @@ +var mongoose = require('mongoose') +var Schema = mongoose.Schema; + +var ImgSchema = new Schema({ + img: { + identifier: Number, + data: Buffer, + variant: String, + name: String, + description: String, + tags: [String], + contentType: String + } +}, { + timestamps: true +}); +module.exports = mongoose.model('Image', ImgSchema); \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index f3c1505..ff47fa4 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1137,6 +1137,11 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -1257,6 +1262,11 @@ "node-releases": "^1.1.36" } }, + "bson": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", + "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3109,6 +3119,11 @@ "minimist": "^1.2.0" } }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3262,6 +3277,12 @@ } } }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -3367,11 +3388,76 @@ } } }, + "mongodb": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.3.3.tgz", + "integrity": "sha512-MdRnoOjstmnrKJsK8PY0PjP6fyF/SBS4R8coxmhsfEU7tQ46/J6j+aSHF2n4c2/H8B+Hc/Klbfp8vggZfI0mmA==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.7.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.7.8.tgz", + "integrity": "sha512-GsFXYo7z3ebnIDdnqlDJYQXQFqEGS+yxfdY9G0B7fxpvUJchDpwLGuGJdVd1QbGxu2l0DscCYBO0ntl3G6OACA==", + "requires": { + "bson": "~1.1.1", + "kareem": "2.3.1", + "mongodb": "3.3.3", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.6.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", + "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { "version": "1.4.2", @@ -4239,6 +4325,11 @@ "safe-regex": "^1.1.0" } }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, "regexpu-core": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", @@ -4319,6 +4410,22 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", @@ -4328,6 +4435,11 @@ "path-parse": "^1.0.6" } }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -4360,6 +4472,15 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4497,6 +4618,11 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -4509,6 +4635,11 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4660,6 +4791,15 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", diff --git a/server/package.json b/server/package.json index 3fb3084..f05a4ed 100644 --- a/server/package.json +++ b/server/package.json @@ -5,6 +5,7 @@ "dependencies": { "cors": "^2.8.5", "formidable": "^1.2.1", + "mongoose": "^5.7.8", "multer": "^1.4.2" }, "scripts": {