diff --git a/src/components/financialSimulator/asset/asset.controller.js b/src/components/financialSimulator/asset/asset.controller.js new file mode 100644 index 0000000..ead5622 --- /dev/null +++ b/src/components/financialSimulator/asset/asset.controller.js @@ -0,0 +1,75 @@ +const { Asset } = require('./asset.model'); +const { Variation } = require('../variation/variation.model'); +const mongoose = require('mongoose'); +mongoose.set('useFindAndModify', false); + +exports.getAssets = async (req, res) => { + try{ + const assets = await Asset.find().populate(['variations']).sort('name'); + res.send({ assets }); + } + + catch(err) { + return res.status(400).send("Cannot get assets."); + } + +} + +exports.getAsset = async (req, res) => { + try{ + const asset = await Asset.findById(req.params.id).populate(['variations']); + + return res.send(asset); + } + + catch(err) { + return res.status(400).send("Cannot get asset."); + } +} + +exports.createAsset = async (req, res) => { + try { + const { category, name, variations } = req.body; + const asset = await Asset.create({category, name}); + + await Promise.all(variations.map(async variation => { + const assetVariation = new Variation({ ...variation, asset: asset._id}); + + await assetVariation.save(); + asset.variations.push(assetVariation); + })); + + await asset.save(); + return res.send({asset}); + } + + catch(err) { + return res.status(400).send("Cannot create asset."); + } +} + +exports.updateAsset = async (req, res) => { + try{ + const asset = await Asset.findByIdAndUpdate(req.params.id, req.body, { new: true }); + + res.send(asset); + } + + catch(err) { + return res.status(400).send("Cannot update asset."); + } +} + +exports.deleteAsset = async (req, res) => { + try{ + const asset = await Asset.findByIdAndRemove(req.params.id); + + res.send(asset); + } + + catch(err) { + return res.status(400).send("Cannot delete asset."); + } +} + + diff --git a/src/components/financialSimulator/asset/asset.middleware.js b/src/components/financialSimulator/asset/asset.middleware.js new file mode 100644 index 0000000..8580ed9 --- /dev/null +++ b/src/components/financialSimulator/asset/asset.middleware.js @@ -0,0 +1,8 @@ +const { Asset } = require('./asset.model'); + +exports.validateAsset = (req, res, next) => { + const { error } = Asset(req.body); + if (error) return res.status(400).send(error.details[0].message); + + next(); +} diff --git a/src/components/financialSimulator/asset/asset.model.js b/src/components/financialSimulator/asset/asset.model.js new file mode 100644 index 0000000..e036405 --- /dev/null +++ b/src/components/financialSimulator/asset/asset.model.js @@ -0,0 +1,30 @@ +const Joi = require('joi'); +const mongoose = require('mongoose'); +const { Variation } = require('../variation/variation.model'); + + +const Asset = mongoose.model('Asset', new mongoose.Schema({ + category: { + type: String, + enum: ['banco', 'cambio', 'imoveis', 'acoes'], + default: 'banco', + required: true + }, + + name: { + type: String, + required: true + }, + + variations: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'Variation' + }] + + + },{ timestamps: true })); + + module.exports = mongoose.model('Asset', Asset); + + + diff --git a/src/components/financialSimulator/asset/asset.router.js b/src/components/financialSimulator/asset/asset.router.js new file mode 100644 index 0000000..89eacc6 --- /dev/null +++ b/src/components/financialSimulator/asset/asset.router.js @@ -0,0 +1,37 @@ +const express = require('express'); +const router = express.Router(); +const controller = require('./asset.controller'); +const middleware = require('./asset.middleware'); + + +const controllerVariation = require('../variation/variation.controller'); +const middlewareVariation = require('../variation/variation.middleware'); + + + +//Rotas de assets + +router.get('/', controller.getAssets); + +router.get('/:id', controller.getAsset); + +router.post('/', [middleware.validateAsset], controller.createAsset); + +router.put('/:id', [middleware.validateAsset], controller.updateAsset); + +router.delete('/:id', controller.deleteAsset); + +//Rotas de variations + +router.get('/:id/variations', controllerVariation.getVariations); + +router.get('/:id/variations/:idVariation', controllerVariation.getVariation); + +router.post('/:id/variations/', [middlewareVariation.validateVariation], controllerVariation.createVariation); + +router.put('/:id/variations/:idVariation', [middlewareVariation.validateVariation], controllerVariation.updateVariation); + +router.delete('/:id/variations/:idVariation', controllerVariation.deleteVariation); + + +module.exports = router; diff --git a/src/components/financialSimulator/variation/variation.controller.js b/src/components/financialSimulator/variation/variation.controller.js new file mode 100644 index 0000000..3ce9ff4 --- /dev/null +++ b/src/components/financialSimulator/variation/variation.controller.js @@ -0,0 +1,86 @@ +const { Variation } = require('./variation.model'); +const { Asset } = require('../asset/asset.model'); + + +exports.getVariations = async (req, res) => { + try{ + const idUser = req.params.id; + const user = await Asset.findById(idUser).populate(['variations']); + const userVariations = user.variations; + + res.send(userVariations); + } + + catch(err) { + return res.status(400).send( "Cannot get variations." ); + } + +} + +exports.getVariation = async (req, res) => { + try{ + const idVariation = await req.params.idVariation; + const variation = await Variation.findById(idVariation); + res.send(variation); + } + + catch(err) { + return res.status(400).send("Cannot get variation." ); + } + +} + + +exports.createVariation = async (req, res) => { + try { + const paramsVariation = req.body; + const variation = new Variation(paramsVariation); + const idUser = req.params.id; + const user = await Asset.findById(idUser).populate(['variations']); + const variations = user.variations; + + variations.push(variation); + + await variation.save(); + await user.save(); + + + return res.send(variation); + } + + catch(err) { + return res.status(400).send("Cannot create variation."); + + } +}; + +exports.updateVariation = async (req, res) => { + try { + const idVariation = await req.params.idVariation; + const bodyVariation = await req.body; + const variation = await Variation.findByIdAndUpdate(idVariation, + bodyVariation, { new: true }); + + return res.send(variation); + } + + catch(err) { + return res.status(400).send("Cannot update variation."); + } +} + +exports.deleteVariation = async (req, res) => { + try { + const idVariation = await req.params.idVariation; + const variation = await Variation.findByIdAndRemove(idVariation); + + res.send(variation); + } + + + + catch(err) { + return res.status(400).send("Cannot delete variation."); + } +} + diff --git a/src/components/financialSimulator/variation/variation.middleware.js b/src/components/financialSimulator/variation/variation.middleware.js new file mode 100644 index 0000000..ca1368d --- /dev/null +++ b/src/components/financialSimulator/variation/variation.middleware.js @@ -0,0 +1,14 @@ +const { validate } = require('./variation.model'); +const Joi = require('Joi'); + +exports.validateVariation = (req, res, next) => { + + const { error } = Joi.validate(req.body); + if (error) return res.status(400).send(error.details[0].message); + + next(); +} + + + + diff --git a/src/components/financialSimulator/variation/variation.model.js b/src/components/financialSimulator/variation/variation.model.js new file mode 100644 index 0000000..129d712 --- /dev/null +++ b/src/components/financialSimulator/variation/variation.model.js @@ -0,0 +1,22 @@ +const Joi = require('joi'); +const mongoose = require('mongoose'); + +const Variation = mongoose.model('Variation', new mongoose.Schema({ + variation: { + type: Number, + required: true + }, + + month: { + type: Number, + required: true + }, + + year: { + type: Number, + required: true + }, + + },{ timestamps: true })); + + module.exports.Variation = Variation; \ No newline at end of file diff --git a/src/components/minigames/memory/memoryAnswer/memoryAnswer.controller.js b/src/components/minigames/memory/memoryAnswer/memoryAnswer.controller.js index 8879fae..633ab98 100644 --- a/src/components/minigames/memory/memoryAnswer/memoryAnswer.controller.js +++ b/src/components/minigames/memory/memoryAnswer/memoryAnswer.controller.js @@ -1,17 +1,37 @@ const Memory = require('../memory.model'); const MemoryAnswer = require('./memoryAnswer.model'); +const { User, userTypes } = require('../../../user/user.model'); const mongoose = require('mongoose'); +exports.listMemoryAnswers = async (req, res) => { + const query = { + ...req.query, + _memory: req.params.memoryId + }; + + if (req.query.type === userTypes.STUDENT) { + query._user = req.user.id; + } + + const memoryAnswers = await MemoryAnswer.find(query) + .populate({ path: '_user', select: 'name' }) + .populate({ path: '_memory', select: 'name' }); + res.send(memoryAnswers); +}; + exports.createMemoryAnswer = async (req, res) => { const memoryAnswer = new MemoryAnswer({ ...req.body, _user: req.user.id, - _quiz: req.params.memoryId + _memory: req.params.memoryId }); const userId = mongoose.Types.ObjectId(req.user.id); const memory = await Memory.findById(req.params.memoryId); memory.users.push(userId); await memory.save(); await memoryAnswer.save(); + + await User.findByIdAndUpdate(req.user.id, { $inc: { points: memory.points } }); + res.status(201).send(memoryAnswer); }; diff --git a/src/components/minigames/memory/memoryAnswer/memoryAnswer.router.js b/src/components/minigames/memory/memoryAnswer/memoryAnswer.router.js index 7391ccd..fb24725 100644 --- a/src/components/minigames/memory/memoryAnswer/memoryAnswer.router.js +++ b/src/components/minigames/memory/memoryAnswer/memoryAnswer.router.js @@ -2,20 +2,12 @@ const express = require('express'); const router = express.Router({ mergeParams: true }); const memoryAnswerCtrl = require('./memoryAnswer.controller'); -// const memoryAnswerMiddleware = require('./quizAnswer.middlewares'); const userMiddleware = require('../../../user/user.middlewares'); -// router.get('/', userMiddleware.authorize(), memoryAnswerCtrl.listQuizAnswers); - -// router.get('/:quizAnswerId', userMiddleware.authorize(), memoryAnswerCtrl.getQuizAnswer); +router.get('/', userMiddleware.authorize(), memoryAnswerCtrl.listMemoryAnswers); router.post('/', [ userMiddleware.authorize() ], memoryAnswerCtrl.createMemoryAnswer); -// router.delete('/:quizAnswerId', [ -// userMiddleware.authorize(), -// memoryAnswerMiddleware.getQuizAnswer -// ], memoryAnswerCtrl.deleteQuizAnswer); - module.exports = router;