sequlizeinoutils
Version:
Simple helpers for Sequelize based rest server
140 lines (127 loc) • 3.93 kB
JavaScript
const Op = require("sequelize").Op;
function getter(model,req,res,includeModels,cb) {
let options = {where:{}};
let page = 0;
let limit = 10;
let offset = 0;
if (req.query.limit){
limit = req.query.limit;
}
if (req.query.page){
page = parseInt(req.query.page) - 1;
offset = page * parseInt(limit);
options.offset = offset;
options.limit = parseInt(limit);
options.distinct = true;
}
if (req.query.filter){
let filter = {};
try {
filter = JSON.parse(req.query.filter);
for (let key in filter){ options.where[key] = filter[key] }
}catch (e) {
cb({error:true,message:e.message});
return;
}
}
if (req.query.search){
let search = {};
try {
search = JSON.parse(req.query.search);
for (let key in search){options.where[key] = { [Op.like] : "%"+search[key]+"%"}}
}catch (e) {
cb({error:true,message:e.message});
return;
}
}
if (req.query.id){ options = {where:{}}; options.where.id = req.query.id; }
if (req.query.append === "all"){ options = includeModels(model,options) }
model.findAndCountAll(options).then((results)=>{
if (req.query.page){
results.pageCount = Math.ceil(results.count / limit);
results.currentPage = req.query.page;
let pages = [];
for (let i = 0; i < Math.ceil(results.count / limit);i++){
pages.push(i+1);
}
if (parseInt(req.query.page) === Math.ceil(results.count / limit)){
results.isLastPage = true
}else{
results.isLastPage = false;
}
results.pages = pages;
}
cb({error:false,message:results});
}).catch((err)=>{
cb({error:true,message:err.message});
});
}
function getById(model,id,cb){
model.findOne({where:{id}}).then((result)=>{
cb({error:false,message:result})
}).catch((err)=>{
cb({error:true,message:err.message})
});
}
function forceRemove(model,id,cb){
model.destroy({
where:{ id }
}).then((results)=>{
cb({error:false,message:{message:"deleted",info:results}})
}).catch((error)=>{
cb({error:true,message:error.message})
})
}
function clear(model,cb){
model.destroy({where:{},truncate:true}).then((results)=>{
cb({error:false,message:{message:"cleared",info:results}})
}).catch((err)=>{
cb({error:true,message:err.message})
})
}
function removeById(model,id,cb){
model.findOne({where:{id}}).then((results)=>{
if (results){
model.destroy({
where:{id}
}).then((data)=>{
cb({error:false,message:{message:"deleted",info:results}})
}).catch((error)=>{
cb({error:false,message:error.message})
});
}else{
cb({error:false,message:{message:"cleared",info:results},status:404})
}
}).catch((err)=>{
cb({error:false,message:err.message})
})
}
function removeConnectionFrom(model,obj,cb) {
model.destroy({where:{obj}}).then((data)=>{
cb({error:false,message:"relation removed"});
}).catch((error)=>{
cb({error:true,message:error.message})
})
}
function addConnectionTo(model,obj,cb){
model.findOne({where:obj}).then((results)=>{
if (results){
cb({error:true,message:"relation exists"})
}else{
model.create(obj).then(()=>{
cb({error:false,message:"relation created"});
})
}
}).catch((err)=>{
cb({error:true,message:err.message})
})
}
module.exports = {
clear,
getter,
getById,
forceRemove,
removeById,
removeConnectionFrom,
addConnectionTo
};