diff --git a/src/controllers/service_fare.ts b/src/controllers/service_fare.ts index 850ac26..7758aa0 100644 --- a/src/controllers/service_fare.ts +++ b/src/controllers/service_fare.ts @@ -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;