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"),
|
||||
with_deleted: Joi.bool().required().label("With Deleted"),
|
||||
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 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);
|
||||
|
||||
const offset = (param.page - 1) * param.limit;
|
||||
let limit = param.limit;
|
||||
|
||||
const res_count = query;
|
||||
const res_count = query.clone();
|
||||
const res_list = query
|
||||
.leftJoinAndSelect("Service.servicefare", "servicefare")
|
||||
.leftJoinAndSelect("servicefare.serviceClass", "serviceClass")
|
||||
// .leftJoinAndSelect('ServiceFare.faretype', 'faretype')
|
||||
.select([
|
||||
"Service.id",
|
||||
"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)
|
||||
.offset(offset)
|
||||
.limit(limit);
|
||||
.skip(offset)
|
||||
.take(limit);
|
||||
|
||||
if (param.with_deleted) {
|
||||
res_count.withDeleted();
|
||||
@ -64,10 +69,17 @@ export class ServiceFareController {
|
||||
|
||||
const current_page = param.page;
|
||||
const total_count_data = await res_count.getCount();
|
||||
const list_data = await res_list.getMany();
|
||||
const count_data = CommonHelper.countObject(list_data);
|
||||
const list_data = await res_list.getRawAndEntities();
|
||||
|
||||
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) {
|
||||
log.error(e);
|
||||
const err = e as Error;
|
||||
|
||||
Reference in New Issue
Block a user