graojs
Version:
graoJS - A full stack MVC NodeJS framework
101 lines (89 loc) • 3.7 kB
JavaScript
var service = {}, admin = {}, models, controllers, event, config, {{ schema | capitalize }}, $i;
service.count = async (req, res) => {
let dataList = controllers.processDataList({{ schema | capitalize }}, req.query);
try {
let totality = await {{ schema | capitalize }}.count();
if(dataList.filter == null) {
return res.json({totality: totality, filtered: 0});
}
let filtered = await {{ schema | capitalize }}.count(dataList.filter);
return res.json({totality: totality, filtered: filtered});
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
service.get = async (req, res) => {
try {
let {{ schema | lower }} = await {{ schema | capitalize}}.findOne({_id : req.params.id}){%- for fieldName, field in fields %}{%- if field.ref %}.populate('{{ fieldName | lower }}'){%- endif %}{%- endfor %}.exec();
return res.json({{ schema | lower}});
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
service.query = async (req, res) => {
let dataList = { page: {}, sort: 'field -_id' };
if(req.query.filter || req.query.sort || req.query.page)
dataList = controllers.processDataList({{ schema | capitalize }}, req.query);
try {
let {{ schema | lower }}s = await {{ schema | capitalize }}.find(dataList.filter || null).
sort(dataList.sort || null).
skip(dataList.page.skip || null).
limit(dataList.page.limit || null).
populate('{{ schema | lower }}'){%- for fieldName, field in fields %}{%- if field.ref %}.
populate('{{ fieldName | lower }}'){%- endif %}{%- endfor %}.
exec();
return res.json({{ schema | lower }}s);
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
service.validate = (req, res, next) => {
let {{ schema | lower }} = new {{ schema | capitalize }}(req.body);
{{ schema | lower }}.validate(function(err){
if(err)
return res.json(event.newError(err).toJson());
else
return next();
});
}
service.create = async (req, res) => {
try {
let {{ schema | lower }} = new {{ schema | capitalize }}(req.body);
{{ schema | lower }} = await {{ schema | lower }}.save();
return res.json(event.newSuccess(res.__("{{ schema }}")+" "+res.__("created")).data({{ schema | lower }}).toJson());
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
service.update = async (req, res) => {
delete req.body._id;
try {
let {{ schema | lower }} = await {{ schema | capitalize }}.findOneAndUpdate({_id : req.params.id }, req.body, { upsert : true });
return res.json(event.newSuccess(res.__("{{ schema }}")+" "+res.__("updated")).data({{ schema | lower }}).toJson());
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
service.destroy = async (req, res) => {
try {
await {{ schema | capitalize }}.remove({_id : req.params.id});
return res.json(event.newSuccess(res.__("Destroyed")).toJson());
} catch(err) {
return res.json(event.newError(err).toJson());
}
}
admin.dashboard = (req, res) => {
let locale = (config.locales.indexOf(req.cookies.locale) >= 0) ? req.cookies.locale : config.defaultLocale;
res.render('{{ bundle | lower }}/view/{{ schema | lower }}_dashboard', { isAuth: req.isAuthenticated(), locale: locale, user: req.user});
}
var {{ schema | capitalize }}Controller = function(di) {
$i = di;
event = new $i.event.newSuccess('Instance created');
config = $i.config;
models = $i.models;
controllers = $i.controllers;
{{ schema | capitalize }} = models.{{ schema | lower }}; // object/class
this.service = service;
this.admin = admin;
};
module.exports = exports = {{ schema | capitalize }}Controller;