├── .gitignore ├── LICENSE ├── README.md └── server ├── app.js ├── bin └── www ├── config ├── db.js └── dbModels.js ├── modules ├── Comprador │ ├── atoms │ │ ├── dateBirth.js │ │ └── name.js │ ├── brainCreate.js │ ├── brainFind.js │ ├── brainFindOne.js │ ├── brainRemove.js │ ├── brainUpdate.js │ ├── config │ │ ├── db.js │ │ └── dbModels.js │ ├── hadrons │ │ ├── emailValidateMongoose.js │ │ ├── nameValidateMongoose.js │ │ └── passwordValidateMongoose.js │ ├── molecules │ │ └── comprador.js │ ├── organisms │ │ ├── comprador.js │ │ └── organelles │ │ │ ├── callback.js │ │ │ ├── callbackExpress.js │ │ │ ├── callbackRemove.js │ │ │ ├── create.js │ │ │ ├── find.js │ │ │ ├── findOne.js │ │ │ ├── getQuery.js │ │ │ ├── remove.js │ │ │ └── update.js │ ├── quarks │ │ ├── isDate.js │ │ ├── isDateBegin.js │ │ ├── isDateBirth.js │ │ ├── isDateBirthMessage.js │ │ ├── isEmail.js │ │ ├── isEmailMessage.js │ │ ├── isEmpty.js │ │ ├── isLink.js │ │ ├── isLinkMessage.js │ │ ├── isName.js │ │ ├── isNameMessage.js │ │ ├── isPassword.js │ │ ├── isPasswordMessage.js │ │ └── isString.js │ └── routes.js ├── Curso │ ├── atoms │ │ ├── curso.js │ │ ├── cursoRef.js │ │ ├── dateBegin.js │ │ ├── dateBirth.js │ │ ├── email.js │ │ ├── link.js │ │ ├── name.js │ │ ├── password.js │ │ ├── schoolName.js │ │ └── userRef.js │ ├── brainCreate.js │ ├── brainFind.js │ ├── brainFindOne.js │ ├── brainRemove.js │ ├── brainUpdate.js │ ├── hadrons │ │ ├── emailValidateMongoose.js │ │ └── passwordValidateMongoose.js │ ├── molecules │ │ └── curso.js │ ├── organisms │ │ ├── curso.js │ │ └── organelles │ │ │ ├── callback.js │ │ │ ├── callbackExpress.js │ │ │ ├── callbackRemove.js │ │ │ ├── create.js │ │ │ ├── find.js │ │ │ ├── findOne.js │ │ │ ├── getQuery.js │ │ │ ├── remove.js │ │ │ └── update.js │ ├── quarks │ │ ├── isDate.js │ │ ├── isDateBegin.js │ │ ├── isDateBirth.js │ │ ├── isDateBirthMessage.js │ │ ├── isEmail.js │ │ ├── isEmailMessage.js │ │ ├── isEmpty.js │ │ ├── isLink.js │ │ ├── isLinkMessage.js │ │ ├── isName.js │ │ ├── isNameMessage.js │ │ ├── isPassword.js │ │ ├── isPasswordMessage.js │ │ └── isString.js │ └── routes.js ├── Professor │ ├── atoms │ │ ├── curso.js │ │ ├── cursoRef.js │ │ ├── name.js │ │ ├── schoolName.js │ │ └── userRef.js │ ├── brainCreate.js │ ├── brainFind.js │ ├── brainFindOne.js │ ├── brainRemove.js │ ├── brainUpdate.js │ ├── hadrons │ │ ├── emailValidateMongoose.js │ │ └── passwordValidateMongoose.js │ ├── molecules │ │ ├── alunoCurso.js │ │ ├── professor.js │ │ ├── professorCurso.js │ │ └── user.js │ ├── organisms │ │ ├── organelles │ │ │ ├── callback.js │ │ │ ├── callbackExpress.js │ │ │ ├── callbackRemove.js │ │ │ ├── create.js │ │ │ ├── find.js │ │ │ ├── findOne.js │ │ │ ├── getQuery.js │ │ │ ├── remove.js │ │ │ └── update.js │ │ └── professor.js │ ├── quarks │ │ ├── isDate.js │ │ ├── isDateBegin.js │ │ ├── isDateBirth.js │ │ ├── isDateBirthMessage.js │ │ ├── isEmail.js │ │ ├── isEmailMessage.js │ │ ├── isEmpty.js │ │ ├── isLink.js │ │ ├── isLinkMessage.js │ │ ├── isName.js │ │ ├── isNameMessage.js │ │ ├── isPassword.js │ │ ├── isPasswordMessage.js │ │ └── isString.js │ └── routes.js ├── User │ ├── atoms │ │ ├── email.js │ │ └── password.js │ ├── brainCreate.js │ ├── brainFind.js │ ├── brainFindOne.js │ ├── brainRemove.js │ ├── brainUpdate.js │ ├── config │ │ ├── db.js │ │ └── dbModels.js │ ├── hadrons │ │ ├── emailValidateMongoose.js │ │ └── passwordValidateMongoose.js │ ├── molecules │ │ └── user.js │ ├── organisms │ │ ├── organelles │ │ │ ├── callback.js │ │ │ ├── callbackExpress.js │ │ │ ├── callbackRemove.js │ │ │ ├── create.js │ │ │ ├── find.js │ │ │ ├── findOne.js │ │ │ ├── getQuery.js │ │ │ ├── remove.js │ │ │ └── update.js │ │ └── user.js │ ├── quarks │ │ ├── isEmail.js │ │ ├── isEmailMessage.js │ │ ├── isEmpty.js │ │ ├── isPassword.js │ │ ├── isPasswordMessage.js │ │ └── isString.js │ ├── routes.js │ └── routesRefactored.js └── helpers │ ├── findRefMongoose.js │ ├── populateMongoose.js │ ├── prepareDocMongoose.js │ └── runPopulateMongoose.js ├── package.json ├── public └── stylesheets │ └── style.css ├── routes ├── index.js └── users.js └── views ├── error.jade ├── index.jade └── layout.jade /.gitignore: -------------------------------------------------------------------------------- 1 | src/node_modules 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | 13 | # Directory for instrumented libs generated by jscoverage/JSCover 14 | lib-cov 15 | 16 | # Coverage directory used by tools like istanbul 17 | coverage 18 | 19 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 20 | .grunt 21 | 22 | # node-waf configuration 23 | .lock-wscript 24 | 25 | # Compiled binary addons (http://nodejs.org/api/addons.html) 26 | build/Release 27 | 28 | # Dependency directory 29 | node_modules 30 | 31 | # Optional npm cache directory 32 | .npm 33 | 34 | # Optional REPL history 35 | .node_repl_history 36 | 37 | #VS Code stuff 38 | .vscode 39 | 40 | #JetBrains WebStorm 41 | .idea -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 WebSchool.io 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project-Open-Orders 2 | 3 | Sistema de Pedidos criado no Be MEAN. 4 | 5 | A ideia é criar um sistema de **PEDIDOS** básico que sirva de base para nosso ECOMMERCE. 6 | 7 | Imagine a seguinte situação: 8 | 9 | > Sou um programador que trabalha **home-office** e preciso comprar 1 quadro branco e post-its para ele mas não quero sair de casa. Poderia ligar em alguma papelaria, mas em vez disso posso fazer o pedido via ESSE sistema e a **LOJA** me liga para confirmar o PEDIDO e enviar ele via {QUALQUER TIPO}, exemplo: Moto-boy. 10 | 11 | Logo o Sistema deverá gerenciar o cadastro dos vendedores, compraores e produtos e sua interação, além da sua ENTREGA. 12 | 13 | 14 | **Para quem está lendo isso agora:** 15 | 16 | O sistema será feito em [MEAN](http://webschool.io/bemean), após a finalização da MODELAGEM das ENTIDADES, o FRONT e o BACK poderão seguir em paralelo. 17 | 18 | No BACK iremos definir os Organismos, Moléculas, Átomos, Quarks e afins. Caso não saiba do que se trata favor ver as [aulas de Node.js](https://www.youtube.com/playlist?list=PL77JVjKTJT2hP_lxL88oDo2rJvOskpGfJ). 19 | 20 | No FRONT usaremos Angular e Materialize. 21 | 22 | Gerente de Projeto: [rohmunhoz](https://github.com/rohmunhoz) 23 | 24 | ## Entidades 25 | 26 | - User 27 | - Vendedor (não é necessário ainda) 28 | - Comprador 29 | - Loja 30 | - Produto 31 | - Pedido 32 | 33 | ### Comprador 34 | 35 | - nome: String 36 | - dataNascimento: Date 37 | - produtos: Array 38 | 39 | #### API 40 | 41 | - C: POST http://localhost:3000/api/compradores/ 42 | - R: GET http://localhost:3000/api/compradores/ 43 | + GET http://localhost:3000/api/compradores/{_id} 44 | - U: PUT http://localhost:3000/api/compradores/{_id} 45 | - D: DELETE http://localhost:3000/api/compradores/{_id} 46 | 47 | 48 | ### Produto 49 | 50 | - nome: String 51 | - sku: String 52 | - descricao: String 53 | - tamanho: String 54 | - createdAt: Date 55 | - updatedAt: Date 56 | - peso: { 57 | valor: Number 58 | , unidade: String 59 | } 60 | - images: { 61 | thumb: String, 62 | gallery: Array 63 | } 64 | - valor: { 65 | real: Number 66 | , moeda: String 67 | } 68 | - dimensoes: { 69 | largura: Number 70 | , comprimento: Number 71 | , altura: Number 72 | , unidade: String 73 | } 74 | - categorias: Array 75 | - tags: Array 76 | 77 | 78 | ### Pedido 79 | 80 | - vendedor_id: ObjectId 81 | - comprador_id: ObjectId 82 | - produtos: [{ 83 | produto_id: ObjectId, 84 | quantidade: Number, 85 | desconto: Number // em % 86 | }] 87 | - desconto: Number // em % 88 | 89 | ### Loja 90 | 91 | - dono_id: ObjectId 92 | - nome: String 93 | - contato: { 94 | Nome: String 95 | , email: String 96 | , Telefone: String 97 | , Endereço: String 98 | } 99 | - categoria: ENUM 100 | - tags: Array 101 | - endereço: {} 102 | - telefone: {} 103 | - produtos: [] 104 | - vendedores: [] 105 | - compradores:[] 106 | -------------------------------------------------------------------------------- /server/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | require('./config/dbModels'); 4 | 5 | const express = require('express'); 6 | const path = require('path'); 7 | const favicon = require('static-favicon'); 8 | const logger = require('morgan'); 9 | const cookieParser = require('cookie-parser'); 10 | const bodyParser = require('body-parser'); 11 | 12 | const routes = require('./routes/index'); 13 | const users = require('./routes/users'); 14 | 15 | // Nossos módulos da API 16 | const CompradoresAPI = require('./modules/Comprador/routes'); 17 | 18 | const app = express(); 19 | 20 | // view engine setup 21 | app.set('views', path.join(__dirname, 'views')); 22 | app.set('view engine', 'jade'); 23 | 24 | app.use(favicon()); 25 | app.use(logger('dev')); 26 | app.use(bodyParser.json()); 27 | app.use(bodyParser.urlencoded()); 28 | app.use(cookieParser()); 29 | app.use(express.static(path.join(__dirname, 'public'))); 30 | 31 | app.use('/', routes); 32 | app.use('/users', users); 33 | 34 | // API JSON 35 | app.use('/api/compradores', CompradoresAPI); 36 | 37 | /// catch 404 and forward to error handler 38 | app.use(function(req, res, next) { 39 | const err = new Error('Not Found'); 40 | err.status = 404; 41 | next(err); 42 | }); 43 | 44 | /// error handlers 45 | 46 | // development error handler 47 | // will print stacktrace 48 | if (app.get('env') === 'development') { 49 | app.use(function(err, req, res, next) { 50 | res.status(err.status || 500); 51 | res.render('error', { 52 | message: err.message, 53 | error: err 54 | }); 55 | }); 56 | } 57 | 58 | // production error handler 59 | // no stacktraces leaked to user 60 | app.use(function(err, req, res, next) { 61 | res.status(err.status || 500); 62 | res.render('error', { 63 | message: err.message, 64 | error: {} 65 | }); 66 | }); 67 | 68 | 69 | module.exports = app; 70 | -------------------------------------------------------------------------------- /server/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var debug = require('debug')('crud-express'); 3 | var app = require('../app'); 4 | 5 | app.set('port', process.env.PORT || 3000); 6 | 7 | var server = app.listen(app.get('port'), function() { 8 | debug('Express server listening on port ' + server.address().port); 9 | }); 10 | -------------------------------------------------------------------------------- /server/config/db.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const dbURI = 'mongodb://localhost/modelo-padrao'; 5 | 6 | mongoose.connect(dbURI); 7 | 8 | mongoose.connection.on('connected', function () { 9 | console.log('Mongoose default connection connected to ' + dbURI); 10 | }); 11 | mongoose.connection.on('error',function (err) { 12 | console.log('Mongoose default connection error: ' + err); 13 | }); 14 | mongoose.connection.on('disconnected', function () { 15 | console.log('Mongoose default connection disconnected'); 16 | }); 17 | mongoose.connection.on('open', function () { 18 | console.log('Mongoose default connection is open'); 19 | }); 20 | 21 | process.on('SIGINT', function() { 22 | mongoose.connection.close(function () { 23 | console.log('Mongoose default connection disconnected through app termination'); 24 | process.exit(0); 25 | }); 26 | }); -------------------------------------------------------------------------------- /server/config/dbModels.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const dbURI = 'mongodb://localhost/be-mean-open-orders'; 3 | 4 | mongoose.connect(dbURI); 5 | 6 | mongoose.connection.on('connected', function () { 7 | console.log('Mongoose default connection connected to ' + dbURI); 8 | }); 9 | mongoose.connection.on('error',function (err) { 10 | console.log('Mongoose default connection error: ' + err); 11 | }); 12 | mongoose.connection.on('disconnected', function () { 13 | console.log('Mongoose default connection disconnected'); 14 | }); 15 | mongoose.connection.on('open', function () { 16 | console.log('Mongoose default connection is open'); 17 | }); 18 | 19 | process.on('SIGINT', function() { 20 | mongoose.connection.close(function () { 21 | console.log('Mongoose default connection disconnected through app termination'); 22 | process.exit(0); 23 | }); 24 | }); 25 | 26 | 27 | mongoose.model('Comprador', require('../modules/Comprador/molecules/comprador')); -------------------------------------------------------------------------------- /server/modules/Comprador/atoms/dateBirth.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/dateBirthValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Comprador/atoms/name.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | , validate: require('./../hadrons/nameValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Comprador/brainCreate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | Organism.create(obj, (err, data) => { 10 | callbackExpress(err, data, res); 11 | }); 12 | }; 13 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/brainFind.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | 10 | Organism.find(obj, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/brainFindOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.findOne(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/brainRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.remove(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/brainUpdate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | let mod = req.body; 10 | let options = { runValidators: true }; 11 | 12 | Organism.update(query, mod, options, (err, data) => { 13 | callbackExpress(err, data, res); 14 | }); 15 | }; 16 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/config/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const dbURI = 'mongodb://localhost/modelo-padrao'; 3 | 4 | mongoose.connect(dbURI); 5 | 6 | mongoose.connection.on('connected', function () { 7 | console.log('Mongoose default connection connected to ' + dbURI); 8 | }); 9 | mongoose.connection.on('error',function (err) { 10 | console.log('Mongoose default connection error: ' + err); 11 | }); 12 | mongoose.connection.on('disconnected', function () { 13 | console.log('Mongoose default connection disconnected'); 14 | }); 15 | mongoose.connection.on('open', function () { 16 | console.log('Mongoose default connection is open'); 17 | }); 18 | 19 | process.on('SIGINT', function() { 20 | mongoose.connection.close(function () { 21 | console.log('Mongoose default connection disconnected through app termination'); 22 | process.exit(0); 23 | }); 24 | }); -------------------------------------------------------------------------------- /server/modules/Comprador/config/dbModels.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const dbURI = 'mongodb://localhost/modelo-padrao'; 3 | 4 | mongoose.connect(dbURI); 5 | 6 | mongoose.connection.on('connected', function () { 7 | console.log('Mongoose default connection connected to ' + dbURI); 8 | }); 9 | mongoose.connection.on('error',function (err) { 10 | console.log('Mongoose default connection error: ' + err); 11 | }); 12 | mongoose.connection.on('disconnected', function () { 13 | console.log('Mongoose default connection disconnected'); 14 | }); 15 | mongoose.connection.on('open', function () { 16 | console.log('Mongoose default connection is open'); 17 | }); 18 | 19 | process.on('SIGINT', function() { 20 | mongoose.connection.close(function () { 21 | console.log('Mongoose default connection disconnected through app termination'); 22 | process.exit(0); 23 | }); 24 | }); -------------------------------------------------------------------------------- /server/modules/Comprador/hadrons/emailValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isEmail') 3 | , message: require('./../quarks/isEmailMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/hadrons/nameValidateMongoose.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const Quark = 'is'; 4 | const QuarkName = 'Name'; 5 | 6 | module.exports = { 7 | validator: require('./../quarks/'+Quark+QuarkName) 8 | , message: require('./../quarks/'+Quark+QuarkName+'Message') 9 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/hadrons/passwordValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isPassword') 3 | , message: require('./../quarks/isPasswordMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/molecules/comprador.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const Molecule = { 5 | name: require('./../atoms/name') 6 | // , dateBirth: require('./../atoms/dateBirth') 7 | // , products: [{type: Schema.Types.ObjectId, ref: 'products'}] 8 | } 9 | 10 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/comprador.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const Organism = mongoose.model('Comprador'); 5 | 6 | const create = require('./organelles/create')(Organism); 7 | const find = require('./organelles/find')(Organism); 8 | const findOne = require('./organelles/findOne')(Organism); 9 | const update = require('./organelles/update')(Organism); 10 | const remove = require('./organelles/remove')(Organism); 11 | 12 | const Cell = { 13 | create 14 | , find 15 | , findOne 16 | , update 17 | , remove 18 | }; 19 | 20 | module.exports = Cell; -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/callback.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/callbackExpress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data, res) => { 4 | if (err) return console.log('Erro:', err); 5 | res.json(data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/callbackRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data.result); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/create.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.create(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/find.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | return (obj, callback) => Organism.find(obj, callback); 6 | // return (obj, callback) => Organism.find(obj, (err, data) => { 7 | // console.log('obj', obj) 8 | // console.log('callback', callback) 9 | // }); 10 | 11 | }; 12 | 13 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/findOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => { 5 | const arr = require('../../../helpers/prepareDocMongoose')(Organism); 6 | const Refs = require('../../../helpers/findRefMongoose')(arr); 7 | const Populate = require('../../../helpers/runPopulateMongoose'); 8 | 9 | // Organism.findOne(obj).lean().exec(callback); 10 | Organism.findOne(obj).lean().exec( (err, data) => { 11 | if(err) return console.log('ERRO', err); 12 | // se não tiver Refs retorna o objeto 13 | if(!Refs.length) callback(err, data) 14 | if(Object.keys(Refs).length) return Populate.run(data, Refs, callback); 15 | }); 16 | } 17 | }; 18 | 19 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/getQuery.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (req) => { 4 | return require('querystring').parse(require('url').parse(req.url).query); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/remove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.remove(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Comprador/organisms/organelles/update.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // module.exports = (Organism) => { 4 | 5 | // const callbackExpress = require('./callbackExpress'); 6 | 7 | // return (req, res) => { 8 | // // console.log('req.params', req.params) 9 | // let query = { _id: req.params.id }; 10 | // let mod = req.body; 11 | // let options = { runValidators: true }; 12 | 13 | // Organism.update(query, mod, options, (err, data) => { 14 | // callbackExpress(err, data, res); 15 | // }); 16 | // }; 17 | // }; 18 | module.exports = (Organism) => { 19 | return (obj, mod, options, callback) => Organism.update(obj, mod, options, callback); 20 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isDate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if(Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value.getTime())) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isDateBegin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) > today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isDateBirth.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) < today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isDateBirthMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'A data de nascimento {VALUE} precisa ser antes de hoje!'; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isEmail.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isEmailMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O email {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isEmpty.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isNull = (value === null); 5 | const isUndefined = (value === undefined); 6 | const isEmpty = (value === ''); 7 | if (isNull || isUndefined || isEmpty) return true; 8 | return false; 9 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isLink.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /(https?:\/\/(?:www\.|(?!www))?[^\s\.]+\.[^\s]{2,}|\.[^\s]{2,})/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isLinkMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O link {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isName.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 3 && value.length < 80); 11 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isNameMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O nome {VALUE} precisa ter tamanho maior que 3 e menor que 80!'; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isPassword.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 6 && value.length < 20); 11 | } -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isPasswordMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O senha {VALUE} precisa ter tamanho maior que 6 e menor que 20!'; -------------------------------------------------------------------------------- /server/modules/Comprador/quarks/isString.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if (typeof value === 'string' || value instanceof String) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Comprador/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const router = express.Router(); 5 | const Organism = require('./organisms/comprador'); 6 | const Create = require('./brainCreate')(Organism); 7 | const Find = require('./brainFind')(Organism); 8 | const FindOne = require('./brainFindOne')(Organism); 9 | const Update = require('./brainUpdate')(Organism); 10 | const Remove = require('./brainRemove')(Organism); 11 | 12 | 13 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 14 | router.get('/', Find); 15 | router.get('/:id', FindOne); 16 | router.post('/', Create); 17 | // router.put('/:id', Update); 18 | router.put('/:id', Update); 19 | router.delete('/:id', Remove); 20 | 21 | module.exports = router; -------------------------------------------------------------------------------- /server/modules/Curso/atoms/curso.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/cursoValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/cursoRef.js: -------------------------------------------------------------------------------- 1 | module.exports = (Schema) => { 2 | return { type: Schema.Types.ObjectId, ref: 'cursos' }; 3 | }; -------------------------------------------------------------------------------- /server/modules/Curso/atoms/dateBegin.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/dateBeginValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/dateBirth.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/dateBirthValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/email.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/emailValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/link.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/emailValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/name.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/emailValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/password.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | , validate: require('./../hadrons/passwordValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/schoolName.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/schoolNameValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Curso/atoms/userRef.js: -------------------------------------------------------------------------------- 1 | module.exports = (Schema) => { 2 | return { type: Schema.Types.ObjectId, ref: 'users', required: true }; 3 | }; -------------------------------------------------------------------------------- /server/modules/Curso/brainCreate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | Organism.create(obj, (err, data) => { 10 | callbackExpress(err, data, res); 11 | }); 12 | }; 13 | }; -------------------------------------------------------------------------------- /server/modules/Curso/brainFind.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | 10 | Organism.find(obj, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Curso/brainFindOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.findOne(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Curso/brainRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.remove(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Curso/brainUpdate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | let mod = req.body; 10 | let options = { runValidators: true }; 11 | 12 | Organism.update(query, mod, options, (err, data) => { 13 | callbackExpress(err, data, res); 14 | }); 15 | }; 16 | }; -------------------------------------------------------------------------------- /server/modules/Curso/hadrons/emailValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isEmail') 3 | , message: require('./../quarks/isEmailMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Curso/hadrons/passwordValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isPassword') 3 | , message: require('./../quarks/isPasswordMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Curso/molecules/curso.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const Molecule = { 5 | name: require('./../atoms/name') 6 | , dateBegin: require('./../atoms/dateBegin') 7 | , link: require('./../atoms/link') 8 | } 9 | 10 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Curso/organisms/curso.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const Organism = mongoose.model('Curso'); 5 | const create = require('./organelles/create')(Organism); 6 | const find = require('./organelles/find')(Organism); 7 | const findOne = require('./organelles/findOne')(Organism); 8 | const update = require('./organelles/update')(Organism); 9 | const remove = require('./organelles/remove')(Organism); 10 | 11 | const Cell = { 12 | create 13 | , find 14 | , findOne 15 | , update 16 | , remove 17 | }; 18 | 19 | module.exports = Cell; -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/callback.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/callbackExpress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data, res) => { 4 | if (err) return console.log('Erro:', err); 5 | res.json(data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/callbackRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data.result); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/create.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.create(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/find.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.find(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/findOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.findOne(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/getQuery.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (req) => { 4 | return require('querystring').parse(require('url').parse(req.url).query); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/remove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.remove(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/organisms/organelles/update.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, mod, options, callback) => Organism.update(obj, mod, options, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isDate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if(Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value.getTime())) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isDateBegin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) > today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isDateBirth.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) < today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isDateBirthMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'A data de nascimento {VALUE} precisa ser antes de hoje!'; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isEmail.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isEmailMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O email {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isEmpty.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isNull = (value === null); 5 | const isUndefined = (value === undefined); 6 | const isEmpty = (value === ''); 7 | if (isNull || isUndefined || isEmpty) return true; 8 | return false; 9 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isLink.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /(https?:\/\/(?:www\.|(?!www))?[^\s\.]+\.[^\s]{2,}|\.[^\s]{2,})/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isLinkMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O link {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isName.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 3 && value.length < 80); 11 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isNameMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O nome {VALUE} precisa ter tamanho maior que 3 e menor que 80!'; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isPassword.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 6 && value.length < 20); 11 | } -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isPasswordMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O senha {VALUE} precisa ter tamanho maior que 6 e menor que 20!'; -------------------------------------------------------------------------------- /server/modules/Curso/quarks/isString.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if (typeof value === 'string' || value instanceof String) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Curso/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const router = express.Router(); 5 | const Organism = require('./organisms/curso'); 6 | const Create = require('./brainCreate')(Organism); 7 | const Find = require('./brainFind')(Organism); 8 | const FindOne = require('./brainFindOne')(Organism); 9 | const Update = require('./brainUpdate')(Organism); 10 | const Remove = require('./brainRemove')(Organism); 11 | 12 | router.get('/', Find); 13 | router.get('/:id', FindOne); 14 | router.post('/', Create); 15 | router.put('/:id', Update); 16 | router.delete('/:id', Remove); 17 | 18 | module.exports = router; -------------------------------------------------------------------------------- /server/modules/Professor/atoms/curso.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/cursoValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Professor/atoms/cursoRef.js: -------------------------------------------------------------------------------- 1 | module.exports = (Schema) => { 2 | return { type: Schema.Types.ObjectId, ref: 'cursos' }; 3 | }; -------------------------------------------------------------------------------- /server/modules/Professor/atoms/name.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/emailValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Professor/atoms/schoolName.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | // , validate: require('./../hadrons/schoolNameValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/Professor/atoms/userRef.js: -------------------------------------------------------------------------------- 1 | module.exports = (Schema) => { 2 | return { type: Schema.Types.ObjectId, ref: 'users', required: true }; 3 | }; -------------------------------------------------------------------------------- /server/modules/Professor/brainCreate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | Organism.create(obj, (err, data) => { 10 | callbackExpress(err, data, res); 11 | }); 12 | }; 13 | }; -------------------------------------------------------------------------------- /server/modules/Professor/brainFind.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | 9 | Organism.find({}, (err, data) => { 10 | callbackExpress(err, data, res); 11 | }); 12 | }; 13 | }; -------------------------------------------------------------------------------- /server/modules/Professor/brainFindOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.findOne(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Professor/brainRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.remove(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/Professor/brainUpdate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | let mod = req.body; 10 | let options = { runValidators: true }; 11 | 12 | Organism.update(query, mod, options, (err, data) => { 13 | callbackExpress(err, data, res); 14 | }); 15 | }; 16 | }; -------------------------------------------------------------------------------- /server/modules/Professor/hadrons/emailValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isEmail') 3 | , message: require('./../quarks/isEmailMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Professor/hadrons/passwordValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isPassword') 3 | , message: require('./../quarks/isPasswordMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/Professor/molecules/alunoCurso.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const Molecule = { 5 | name: require('./../atoms/name') 6 | , dateBirth: require('./../atoms/dateBirth') 7 | , cursos: [ require('./../atoms/cursoRef')(Schema) ] 8 | } 9 | 10 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Professor/molecules/professor.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | const Curso = require('./curso'); 4 | 5 | const Molecule = { 6 | name: require('./../atoms/name') 7 | , schoolName: require('./../atoms/schoolName') 8 | , cursos: [Curso] 9 | } 10 | 11 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Professor/molecules/professorCurso.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const Molecule = { 5 | name: require('./../atoms/name') 6 | , schoolName: require('./../atoms/schoolName') 7 | , cursos: [ require('./../atoms/cursoRef')(Schema) ] 8 | } 9 | 10 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Professor/molecules/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | const Molecule = { 4 | email: require('./../atoms/email') 5 | , password: require('./../atoms/password') 6 | } 7 | 8 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/callback.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/callbackExpress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data, res) => { 4 | if (err) return console.log('Erro:', err); 5 | res.json(data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/callbackRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data.result); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/create.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.create(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/find.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.find(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/findOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.findOne(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/getQuery.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (req) => { 4 | return require('querystring').parse(require('url').parse(req.url).query); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/remove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.remove(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/organelles/update.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, mod, options, callback) => Organism.update(obj, mod, options, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/Professor/organisms/professor.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | // const Molecule = require('./../molecules/professorCurso'); 5 | const Organism = mongoose.model('Professor'); 6 | 7 | const create = require('./organelles/create')(Organism); 8 | const find = require('./organelles/find')(Organism); 9 | const findOne = require('./organelles/findOne')(Organism); 10 | const update = require('./organelles/update')(Organism); 11 | const remove = require('./organelles/remove')(Organism); 12 | 13 | const Cell = { 14 | create 15 | , find 16 | , findOne 17 | , update 18 | , remove 19 | }; 20 | 21 | module.exports = Cell; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isDate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if(Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value.getTime())) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isDateBegin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) > today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isDateBirth.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isDate = require('./isDate')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isDate) return false; 9 | // Data precisa ser maior que a data atual 10 | const today = new Date(); 11 | return value.setHours(0,0,0,0) < today.setHours(0,0,0,0); 12 | }; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isDateBirthMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'A data de nascimento {VALUE} precisa ser antes de hoje!'; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isEmail.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isEmailMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O email {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isEmpty.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isNull = (value === null); 5 | const isUndefined = (value === undefined); 6 | const isEmpty = (value === ''); 7 | if (isNull || isUndefined || isEmpty) return true; 8 | return false; 9 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isLink.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /(https?:\/\/(?:www\.|(?!www))?[^\s\.]+\.[^\s]{2,}|\.[^\s]{2,})/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isLinkMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O link {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isName.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 3 && value.length < 80); 11 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isNameMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O nome {VALUE} precisa ter tamanho maior que 3 e menor que 80!'; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isPassword.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 6 && value.length < 20); 11 | } -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isPasswordMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O senha {VALUE} precisa ter tamanho maior que 6 e menor que 20!'; -------------------------------------------------------------------------------- /server/modules/Professor/quarks/isString.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if (typeof value === 'string' || value instanceof String) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/Professor/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const router = express.Router(); 5 | const Organism = require('./organisms/professor'); 6 | const Create = require('./brainCreate')(Organism); 7 | const Find = require('./brainFind')(Organism); 8 | const FindOne = require('./brainFindOne')(Organism); 9 | const Update = require('./brainUpdate')(Organism); 10 | const Remove = require('./brainRemove')(Organism); 11 | 12 | router.get('/', Find); 13 | router.get('/:id', FindOne); 14 | router.post('/', Create); 15 | router.put('/:id', Update); 16 | router.delete('/:id', Remove); 17 | 18 | module.exports = router; -------------------------------------------------------------------------------- /server/modules/User/atoms/email.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | , validate: require('./../hadrons/emailValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/User/atoms/password.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | type: String 3 | , validate: require('./../hadrons/passwordValidateMongoose') 4 | , required: true 5 | } -------------------------------------------------------------------------------- /server/modules/User/brainCreate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | Organism.create(obj, (err, data) => { 10 | callbackExpress(err, data, res); 11 | }); 12 | }; 13 | }; -------------------------------------------------------------------------------- /server/modules/User/brainFind.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let obj = req.body; 9 | 10 | Organism.find(obj, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/User/brainFindOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.findOne(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/User/brainRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | 10 | Organism.remove(query, (err, data) => { 11 | callbackExpress(err, data, res); 12 | }); 13 | }; 14 | }; -------------------------------------------------------------------------------- /server/modules/User/brainUpdate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | 5 | const callbackExpress = require('./organisms/organelles/callbackExpress'); 6 | 7 | return (req, res) => { 8 | let query = { _id: req.params.id }; 9 | let mod = req.body; 10 | let options = { runValidators: true }; 11 | 12 | Organism.update(query, mod, options, (err, data) => { 13 | callbackExpress(err, data, res); 14 | }); 15 | }; 16 | }; -------------------------------------------------------------------------------- /server/modules/User/config/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const dbURI = 'mongodb://localhost/modelo-padrao'; 3 | 4 | mongoose.connect(dbURI); 5 | 6 | mongoose.connection.on('connected', function () { 7 | console.log('Mongoose default connection connected to ' + dbURI); 8 | }); 9 | mongoose.connection.on('error',function (err) { 10 | console.log('Mongoose default connection error: ' + err); 11 | }); 12 | mongoose.connection.on('disconnected', function () { 13 | console.log('Mongoose default connection disconnected'); 14 | }); 15 | mongoose.connection.on('open', function () { 16 | console.log('Mongoose default connection is open'); 17 | }); 18 | 19 | process.on('SIGINT', function() { 20 | mongoose.connection.close(function () { 21 | console.log('Mongoose default connection disconnected through app termination'); 22 | process.exit(0); 23 | }); 24 | }); -------------------------------------------------------------------------------- /server/modules/User/config/dbModels.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const dbURI = 'mongodb://localhost/modelo-padrao'; 3 | 4 | mongoose.connect(dbURI); 5 | 6 | mongoose.connection.on('connected', function () { 7 | console.log('Mongoose default connection connected to ' + dbURI); 8 | }); 9 | mongoose.connection.on('error',function (err) { 10 | console.log('Mongoose default connection error: ' + err); 11 | }); 12 | mongoose.connection.on('disconnected', function () { 13 | console.log('Mongoose default connection disconnected'); 14 | }); 15 | mongoose.connection.on('open', function () { 16 | console.log('Mongoose default connection is open'); 17 | }); 18 | 19 | process.on('SIGINT', function() { 20 | mongoose.connection.close(function () { 21 | console.log('Mongoose default connection disconnected through app termination'); 22 | process.exit(0); 23 | }); 24 | }); -------------------------------------------------------------------------------- /server/modules/User/hadrons/emailValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isEmail') 3 | , message: require('./../quarks/isEmailMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/User/hadrons/passwordValidateMongoose.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | validator: require('./../quarks/isPassword') 3 | , message: require('./../quarks/isPasswordMessage') 4 | }; -------------------------------------------------------------------------------- /server/modules/User/molecules/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | const Molecule = { 4 | email: require('./../atoms/email') 5 | , password: require('./../atoms/password') 6 | } 7 | module.exports = new Schema(Molecule); -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/callback.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/callbackExpress.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data, res) => { 4 | console.log(err, data) 5 | if (err) return console.log('Erro:', err); 6 | res.json(data); 7 | }; 8 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/callbackRemove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (err, data) => { 4 | if (err) console.log('Erro:', err); 5 | else console.log('RETORNOU:', data.result); 6 | }; 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/create.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.create(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/find.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.find(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/findOne.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.findOne(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/getQuery.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (req) => { 4 | return require('querystring').parse(require('url').parse(req.url).query); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/remove.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, callback) => Organism.remove(obj, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/organelles/update.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (Organism) => { 4 | return (obj, mod, options, callback) => Organism.update(obj, mod, options, callback); 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /server/modules/User/organisms/user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | // const Molecule = require('./../molecules/user'); 5 | const Organism = mongoose.model('User'); 6 | 7 | const create = require('./organelles/create')(Organism); 8 | const find = require('./organelles/find')(Organism); 9 | const findOne = require('./organelles/findOne')(Organism); 10 | const update = require('./organelles/update')(Organism); 11 | const remove = require('./organelles/remove')(Organism); 12 | 13 | const Cell = { 14 | create 15 | , find 16 | , findOne 17 | , update 18 | , remove 19 | }; 20 | 21 | module.exports = Cell; -------------------------------------------------------------------------------- /server/modules/User/quarks/isEmail.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const regex = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i; 5 | const isEmpty = require('./isEmpty')(value); 6 | const isString = require('./isString')(value); 7 | 8 | if(isEmpty) return false; 9 | if(!isString) return false; 10 | 11 | return regex.test(value); 12 | } -------------------------------------------------------------------------------- /server/modules/User/quarks/isEmailMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O email {VALUE} não é válido!'; -------------------------------------------------------------------------------- /server/modules/User/quarks/isEmpty.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isNull = (value === null); 5 | const isUndefined = (value === undefined); 6 | const isEmpty = (value === ''); 7 | if (isNull || isUndefined || isEmpty) return true; 8 | return false; 9 | } -------------------------------------------------------------------------------- /server/modules/User/quarks/isPassword.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | const isEmpty = require('./isEmpty')(value); 5 | const isString = require('./isString')(value); 6 | 7 | if(isEmpty) return false; 8 | if(!isString) return false; 9 | 10 | return (value.length > 6 && value.length < 20); 11 | } -------------------------------------------------------------------------------- /server/modules/User/quarks/isPasswordMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = 'O senha {VALUE} precisa ter tamanho maior que 6 e menor que 20!'; -------------------------------------------------------------------------------- /server/modules/User/quarks/isString.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = (value) => { 4 | if (typeof value === 'string' || value instanceof String) return true; 5 | return false; 6 | } -------------------------------------------------------------------------------- /server/modules/User/routes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const router = express.Router(); 5 | const Organism = require('./organisms/user'); 6 | const Create = require('./brainCreate')(Organism); 7 | const Find = require('./brainFind')(Organism); 8 | const FindOne = require('./brainFindOne')(Organism); 9 | const Update = require('./brainUpdate')(Organism); 10 | const Remove = require('./brainRemove')(Organism); 11 | 12 | router.get('/', Find); 13 | router.get('/:id', FindOne); 14 | router.post('/', Create); 15 | router.put('/:id', Update); 16 | router.delete('/:id', Remove); 17 | 18 | module.exports = router; -------------------------------------------------------------------------------- /server/modules/User/routesRefactored.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const express = require('express'); 4 | const Router = express.Router(); 5 | 6 | const Actions = require('./organisms/brain'); 7 | 8 | const _actions = ['create', 'find', 'update', 'delete']; 9 | const _methods = ['post', 'get', 'put', 'delete']; 10 | const _paths = ['/', '/', '/:id', '/:id']; 11 | const _callbacks = [Actions.create, Actions.find, Actions.update, Actions.remove]; 12 | 13 | 14 | const routes = [ 15 | { 16 | action: 'create' 17 | , method: 'post' 18 | , path: '/' 19 | , callback: Actions.create 20 | } 21 | , { 22 | action: 'find' 23 | , method: 'get' 24 | , path: '/' 25 | , callback: Actions.find 26 | } 27 | , { 28 | action: 'findOne' 29 | , method: 'get' 30 | , path: '/:id' 31 | , callback: Actions.findOne 32 | } 33 | , { 34 | action: 'update' 35 | , method: 'put' 36 | , path: '/:id' 37 | , callback: Actions.update 38 | } 39 | , { 40 | action: 'delete' 41 | , method: 'delete' 42 | , path: '/:id' 43 | , callback: Actions.remove 44 | } 45 | ]; 46 | 47 | routes.forEach( route => { 48 | Router[route.method](route.path, route.callback); 49 | }); 50 | 51 | module.exports = Router; 52 | 53 | 54 | -------------------------------------------------------------------------------- /server/modules/helpers/findRefMongoose.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (arr) => { 3 | let Refs = []; 4 | let RefsReturn = []; 5 | 6 | Refs = arr.filter((element) => (element.options.ref) || element.caster); 7 | Refs.forEach( (element, index) => { 8 | if(element.options.ref) { 9 | let obj = {}; 10 | // ACHOU UMA REFERENCIA SIMPLES 11 | obj.ref = element.options.ref; 12 | obj.path = element.path; 13 | RefsReturn.push(obj); 14 | } 15 | if(element.caster) { 16 | let obj = {}; 17 | // ACOU UMA REFERENCIA EM ARRAY 18 | obj.ref = element.options.type[0].ref; 19 | obj.path = element.path; 20 | RefsReturn.push(obj); 21 | } 22 | }); 23 | return RefsReturn; 24 | }; -------------------------------------------------------------------------------- /server/modules/helpers/populateMongoose.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | run: (model, query, populateObj, Refs, index) => { 5 | 6 | let doc = populateObj.base; 7 | 8 | const refObjectId = (err, data) => { 9 | let name = populateObj.path.split('_id')[0]; 10 | // deleto o campo user_id 11 | delete doc[populateObj.path]; 12 | // e adiciono o campo user 13 | doc[name] = data; 14 | if(index === Refs.length - 1) populateObj.cb(err, doc); 15 | } 16 | 17 | const refArrayObjectId = (element, index) => { 18 | let q = {_id: element} 19 | console.log('q', q) 20 | model 21 | .findOne(q) 22 | .lean() 23 | .exec( (err, data) => { 24 | // caso seja a primeira iteração 25 | // limpamos o Array 26 | if(!index) doc[populateObj.path] = []; 27 | 28 | doc[populateObj.path].push(data); 29 | if(index === query._id.length -1) populateObj.cb(err, doc); 30 | }); 31 | } 32 | 33 | if(Array.isArray(query._id)) query._id.forEach(refArrayObjectId); 34 | else model.findOne(query).lean().exec(refObjectId); 35 | } 36 | } -------------------------------------------------------------------------------- /server/modules/helpers/prepareDocMongoose.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (Organism) => { 3 | let _paths = Organism.schema.paths; 4 | return Object.keys(_paths).map( (key) => _paths[key]); 5 | }; 6 | -------------------------------------------------------------------------------- /server/modules/helpers/runPopulateMongoose.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const mongoose = require('mongoose'); 4 | const populate = require('./populateMongoose'); 5 | 6 | module.exports = { 7 | run: (data, Refs, cb) => { 8 | Refs.forEach( function(element, index) { 9 | let query = { _id: data[element.path] }; 10 | let populateObj = {base: data, ref: element.ref, path: element.path, cb: cb}; 11 | let nameSingular = element.ref.slice(0, element.ref.length - 1); 12 | let modelName = nameSingular.charAt(0).toUpperCase() + nameSingular.slice(1); 13 | populate.run(mongoose.model(modelName), query, populateObj, Refs, index); 14 | }); 15 | } 16 | }; -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "crud-express", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "nodemon ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.0.0", 10 | "cookie-parser": "~1.0.1", 11 | "debug": "~0.7.4", 12 | "express": "~4.2.0", 13 | "jade": "~1.3.0", 14 | "mongoose": "^4.4.10", 15 | "morgan": "~1.0.0", 16 | "static-favicon": "~1.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /server/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } -------------------------------------------------------------------------------- /server/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res) { 6 | res.render('index', { title: 'Express' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /server/routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET users listing. */ 5 | router.get('/', function(req, res) { 6 | res.send('respond with a resource'); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /server/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /server/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /server/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content --------------------------------------------------------------------------------