update service fare query to include min and max fare, and pagination
This commit is contained in:
@ -36,26 +36,31 @@ export class ServiceFareController {
|
|||||||
limit: Joi.number().required().min(1).label("Limit"),
|
limit: Joi.number().required().min(1).label("Limit"),
|
||||||
with_deleted: Joi.bool().required().label("With Deleted"),
|
with_deleted: Joi.bool().required().label("With Deleted"),
|
||||||
order_field: Joi.string().required().label("Order Field"),
|
order_field: Joi.string().required().label("Order Field"),
|
||||||
order_direction: Joi.string().allow("asc", "desc").required().label("Order Direction"),
|
order_direction: Joi.string().valid("ASC", "DESC").uppercase().required().label("Order Direction"),
|
||||||
});
|
});
|
||||||
|
|
||||||
let param: Paging = await schema.validateAsync(req.query);
|
let param: Paging = await schema.validateAsync(req.query);
|
||||||
|
|
||||||
let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {};
|
let filter = param.filter && param.filter !== "" ? JSON.parse(param.filter) : {};
|
||||||
|
|
||||||
|
const offset = (param.page - 1) * param.limit;
|
||||||
|
const limit = param.limit;
|
||||||
|
|
||||||
var query = await ServiceModel.list(filter);
|
var query = await ServiceModel.list(filter);
|
||||||
|
|
||||||
const offset = (param.page - 1) * param.limit;
|
const res_count = query.clone();
|
||||||
let limit = param.limit;
|
|
||||||
|
|
||||||
const res_count = query;
|
|
||||||
const res_list = query
|
const res_list = query
|
||||||
.leftJoinAndSelect("Service.servicefare", "servicefare")
|
.select([
|
||||||
.leftJoinAndSelect("servicefare.serviceClass", "serviceClass")
|
"Service.id",
|
||||||
// .leftJoinAndSelect('ServiceFare.faretype', 'faretype')
|
"Service.name",
|
||||||
|
])
|
||||||
|
.leftJoin("Service.servicefare", "servicefare")
|
||||||
|
.addSelect("MIN(servicefare.fare)", "min_fare")
|
||||||
|
.addSelect("MAX(servicefare.fare)", "max_fare")
|
||||||
|
.groupBy("Service.id")
|
||||||
.orderBy("Service." + param.order_field, param.order_direction)
|
.orderBy("Service." + param.order_field, param.order_direction)
|
||||||
.offset(offset)
|
.skip(offset)
|
||||||
.limit(limit);
|
.take(limit);
|
||||||
|
|
||||||
if (param.with_deleted) {
|
if (param.with_deleted) {
|
||||||
res_count.withDeleted();
|
res_count.withDeleted();
|
||||||
@ -64,10 +69,17 @@ export class ServiceFareController {
|
|||||||
|
|
||||||
const current_page = param.page;
|
const current_page = param.page;
|
||||||
const total_count_data = await res_count.getCount();
|
const total_count_data = await res_count.getCount();
|
||||||
const list_data = await res_list.getMany();
|
const list_data = await res_list.getRawAndEntities();
|
||||||
const count_data = CommonHelper.countObject(list_data);
|
|
||||||
|
|
||||||
return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, list_data);
|
const merged = list_data.entities.map((entity, index) => ({
|
||||||
|
...entity,
|
||||||
|
min_fare: list_data.raw[index]?.min_fare ?? null,
|
||||||
|
max_fare: list_data.raw[index]?.max_fare ?? null,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const count_data = CommonHelper.countObject(merged);
|
||||||
|
|
||||||
|
return ReturnHelper.successResponselist(res, 200, Language.lang.success_view, count_data, current_page, total_count_data, merged);
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
log.error(e);
|
log.error(e);
|
||||||
const err = e as Error;
|
const err = e as Error;
|
||||||
|
|||||||
Reference in New Issue
Block a user