Skip to content

Instantly share code, notes, and snippets.

@ayberkanilatsiz
Created May 11, 2020 11:14
Show Gist options
  • Save ayberkanilatsiz/9cb3ac01b2227c102738ff1ad79841cb to your computer and use it in GitHub Desktop.
Save ayberkanilatsiz/9cb3ac01b2227c102738ff1ad79841cb to your computer and use it in GitHub Desktop.
Create API from sequelize model
function createAPI(obj,seq_obj,obj_name){
const router = Router();
const keys = Object.keys(obj)
let pk = "DESC";
for(let i = 0; i < keys.length; i++){
const key = keys[i];
const _current_obj = obj[key];
if(_current_obj.primaryKey){
pk = key;
}
}
router.get('/'+obj_name , async (req,res) => {
const { query } = req;
let order_type = query.order_type ? query.order_type : "ASC";
let page = query.page ? query.page : 0;
const skip = page * 20;
const order = [
[pk, order_type]
]
if(query.order_by){
order.pop();
order.push(
[query.order_by,order_type]
)
}
const data = await seq_obj.findAll({
limit:20,
offset:skip,
order,
});
res.send({
data
})
})
router.get('/'+obj_name+"/byPk" , async (req,res) => {
const { query } = req;
const { pk } = query;
const data = await seq_obj.findByPk(pk);
res.send(data)
})
router.get('/'+obj_name+"/findByAnyKey" , async (req,res) => {
const { query } = req;
const { key, value } = query;
try{
const data = await seq_obj.findOne({
where:{
[key]:value
}
});
res.send(data)
}catch(e){
res.send({
sql_error:e,
error:{
message:`Body example example.com/${obj_name}/findByAnyKey?key=id&value=20`
}
})
}
})
return router;
}
@ayberkanilatsiz
Copy link
Author

Example Usage: app.use(createAPI(user_obj,Users,"test"))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment