Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions src/components/financialSimulator/asset/asset.controller.js
Original file line number Diff line number Diff line change
@@ -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.");
}
}


8 changes: 8 additions & 0 deletions src/components/financialSimulator/asset/asset.middleware.js
Original file line number Diff line number Diff line change
@@ -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();
}
30 changes: 30 additions & 0 deletions src/components/financialSimulator/asset/asset.model.js
Original file line number Diff line number Diff line change
@@ -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);



37 changes: 37 additions & 0 deletions src/components/financialSimulator/asset/asset.router.js
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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.");
}
}

Original file line number Diff line number Diff line change
@@ -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();
}




22 changes: 22 additions & 0 deletions src/components/financialSimulator/variation/variation.model.js
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
@@ -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);
};
Original file line number Diff line number Diff line change
Expand Up @@ -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;