feat: Cities uses GenericHandler
This commit is contained in:
59
lib/Handlers/Generic.handler.js
Normal file
59
lib/Handlers/Generic.handler.js
Normal file
@@ -0,0 +1,59 @@
|
||||
"use strict";
|
||||
const { ROOT_PATH, LIB_PATH, MODELS_PATH, HANDLERS_PATH } = process.env;
|
||||
|
||||
async function getPage( page, elements, Model, filter=null, projection=null){
|
||||
const skip = elements * page;
|
||||
const total = await Model.count( filter );
|
||||
const list = await Model.find( filter , projection, { skip : skip , limit : elements } );
|
||||
return {
|
||||
total : total,
|
||||
limit : elements,
|
||||
skip : skip,
|
||||
data : list
|
||||
}
|
||||
}
|
||||
|
||||
async function getPageQuery(page, elements, Model, filter=null, projection=null){
|
||||
const skip = elements * page;
|
||||
const total = await Model.count( filter );
|
||||
return {
|
||||
query : Model.find( filter , projection, { skip : skip , limit : elements } ),
|
||||
total : total,
|
||||
skip : skip
|
||||
};
|
||||
}
|
||||
|
||||
class GenericHandler{
|
||||
constructor( Model, search_param, populate_list=null ) {
|
||||
this.Model = Model;
|
||||
this.search_param = search_param;
|
||||
this.populate_list = populate_list || [];
|
||||
}
|
||||
|
||||
async populateQuey( query ){
|
||||
if( this.populate_list.length > 0 ){
|
||||
query.populate( this.populate_list );
|
||||
}
|
||||
return await query.exec();
|
||||
}
|
||||
|
||||
async getList( page, elements, filter=null, projection=null ){
|
||||
const { query } = await getPageQuery( page , elements, this.Model, filter, projection );
|
||||
return await this.populateQuey( query );
|
||||
}
|
||||
|
||||
async findList( find_string, page, elements, projection=null ){
|
||||
const search_param = this.search_param;
|
||||
const re = new RegExp( find_string );
|
||||
const filter = {};
|
||||
filter[ search_param ] = { $regex: re, $options: 'i' };
|
||||
return await this.getList( page, elements, filter, projection );
|
||||
}
|
||||
|
||||
async getById( id, projection=null ){
|
||||
const query = Model.findById( id, projection );
|
||||
return await this.populateQuey( query );
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = { getPage, getPageQuery, GenericHandler };
|
||||
Reference in New Issue
Block a user