UNPKG

sequlizeinoutils

Version:

Simple helpers for Sequelize based rest server

140 lines (127 loc) 3.93 kB
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 };