From 8cca8afe83bc67a36ec628fed3e46807b3e09246 Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Tue, 31 Mar 2026 09:01:17 +0700 Subject: [PATCH] update service fare --- src/controllers/service_fare.ts | 292 ++++++++++++++++---------------- src/routes/private.ts | 6 +- 2 files changed, 153 insertions(+), 145 deletions(-) diff --git a/src/controllers/service_fare.ts b/src/controllers/service_fare.ts index 7758aa0..a5ef8fe 100644 --- a/src/controllers/service_fare.ts +++ b/src/controllers/service_fare.ts @@ -48,19 +48,19 @@ export class ServiceFareController { var query = await ServiceModel.list(filter); - const res_count = query.clone(); + const res_count = query.clone(); const res_list = query .select([ "Service.id", "Service.name", ]) .leftJoin("Service.servicefare", "servicefare") - .addSelect("MIN(servicefare.fare)", "min_fare") - .addSelect("MAX(servicefare.fare)", "max_fare") - .groupBy("Service.id") + .addSelect("MIN(servicefare.fare)", "min_fare") + .addSelect("MAX(servicefare.fare)", "max_fare") + .groupBy("Service.id") .orderBy("Service." + param.order_field, param.order_direction) - .skip(offset) - .take(limit); + .skip(offset) + .take(limit); if (param.with_deleted) { res_count.withDeleted(); @@ -190,19 +190,27 @@ export class ServiceFareController { .getOne(); if (!fareType) throw { message: `Fare Type ID ${ft.faretype_id} not found` }; - // Loop tiap service_class dalam faretype ini + for (const sc of ft.service_class) { - // Validasi ServiceClass let serviceClass = await ServiceClassModel.list({ "ServiceClass.id": sc.service_class_id }).then((q) => q.getOne()); if (!serviceClass) throw { message: `Service Class ID ${sc.service_class_id} not found` }; - let serviceFare = new ServiceFare(); - serviceFare.service = service; - serviceFare.faretype = ft.faretype_id; - serviceFare.serviceClass = serviceClass; + let serviceFare = await ServiceFareModel.list({ + "ServiceFare.serviceId": param.service_id, + "ServiceFare.faretype": ft.faretype_id, + "ServiceFare.serviceClassId": sc.service_class_id, + }).then((q) => q.getOne()); + + if (!serviceFare) { + serviceFare = new ServiceFare(); + serviceFare.service = service; + serviceFare.faretype = ft.faretype_id; + serviceFare.serviceClass = serviceClass; + serviceFare.created_by = req.auth.data.name; + } + serviceFare.fare = String(sc.fare ?? 0); - serviceFare.created_by = req.auth.data.name; serviceFare.updated_by = req.auth.data.name; const saved = await queryRunner.manager.save(serviceFare); @@ -252,158 +260,158 @@ export class ServiceFareController { } } - static async update(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Service Fare'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } - #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/serviceFare" } } } } - */ - const queryRunner = OrmHelper.DB.createQueryRunner(); - await queryRunner.startTransaction(); + // static async update(req: Request, res: Response, next: NextFunction): Promise { + // /* + // #swagger.tags = ['Service Fare'] + // #swagger.security = [{ "bearerAuth": [] }] + // #swagger.parameters['id'] = { description: '', in: 'path', type: 'string' } + // #swagger.requestBody = { required: true, content: { "application/json": { schema: { $ref: "#/components/schemas/serviceFare" } } } } + // */ + // const queryRunner = OrmHelper.DB.createQueryRunner(); + // await queryRunner.startTransaction(); - try { - const schema = Joi.object().keys({ - service_id: Joi.string().uuid().required().label("Service ID"), - faretype: Joi.array().items( - Joi.object().keys({ - faretype_id: Joi.string().uuid().required().label("Fare Type ID"), - service_class: Joi.array().items( - Joi.object().keys({ - service_class_id: Joi.string().uuid().required().label("Service Class ID"), - fare: Joi.number().min(0).allow(null).label("Fare"), - }) - ).min(1).required().label("Service Class"), - }) - ).min(1).required().label("Fare Type"), - }); + // try { + // const schema = Joi.object().keys({ + // service_id: Joi.string().uuid().required().label("Service ID"), + // faretype: Joi.array().items( + // Joi.object().keys({ + // faretype_id: Joi.string().uuid().required().label("Fare Type ID"), + // service_class: Joi.array().items( + // Joi.object().keys({ + // service_class_id: Joi.string().uuid().required().label("Service Class ID"), + // fare: Joi.number().min(0).allow(null).label("Fare"), + // }) + // ).min(1).required().label("Service Class"), + // }) + // ).min(1).required().label("Fare Type"), + // }); - let param: any = await schema.validateAsync(req.body); + // let param: any = await schema.validateAsync(req.body); - // Validasi Service - let service = await ServiceModel.list({ "Service.id": param.service_id }).then((q) => q.getOne()); - if (!service) throw { message: "Service not found" }; + // // Validasi Service + // let service = await ServiceModel.list({ "Service.id": param.service_id }).then((q) => q.getOne()); + // if (!service) throw { message: "Service not found" }; - // Hapus semua row lama berdasarkan service_id - const existingFares = await ServiceFareModel.list({ "ServiceFare.serviceId": param.service_id }).then((q) => q.getMany()); - if (existingFares.length > 0) { - await queryRunner.manager.remove(existingFares); - } + // // Hapus semua row lama berdasarkan service_id + // const existingFares = await ServiceFareModel.list({ "ServiceFare.serviceId": param.service_id }).then((q) => q.getMany()); + // if (existingFares.length > 0) { + // await queryRunner.manager.remove(existingFares); + // } - const savedServiceFares: ServiceFare[] = []; + // const savedServiceFares: ServiceFare[] = []; - // Loop tiap faretype - for (const ft of param.faretype) { + // // Loop tiap faretype + // for (const ft of param.faretype) { - // Validasi FareType - let fareType = await OrmHelper.DB.getRepository("FareType") - .createQueryBuilder("FareType") - .where("FareType.id = :id", { id: ft.faretype_id }) - .getOne(); - if (!fareType) throw { message: `Fare Type ID ${ft.faretype_id} not found` }; + // // Validasi FareType + // let fareType = await OrmHelper.DB.getRepository("FareType") + // .createQueryBuilder("FareType") + // .where("FareType.id = :id", { id: ft.faretype_id }) + // .getOne(); + // if (!fareType) throw { message: `Fare Type ID ${ft.faretype_id} not found` }; - // Loop tiap service_class dalam faretype ini - for (const sc of ft.service_class) { + // // Loop tiap service_class dalam faretype ini + // for (const sc of ft.service_class) { - // Validasi ServiceClass - let serviceClass = await ServiceClassModel.list({ "ServiceClass.id": sc.service_class_id }).then((q) => q.getOne()); - if (!serviceClass) throw { message: `Service Class ID ${sc.service_class_id} not found` }; + // // Validasi ServiceClass + // let serviceClass = await ServiceClassModel.list({ "ServiceClass.id": sc.service_class_id }).then((q) => q.getOne()); + // if (!serviceClass) throw { message: `Service Class ID ${sc.service_class_id} not found` }; - let serviceFare = new ServiceFare(); - serviceFare.service = service; - serviceFare.faretype = ft.faretype_id; - serviceFare.serviceClass = serviceClass; - serviceFare.fare = String(sc.fare ?? 0); - serviceFare.created_by = req.auth.data.name; - serviceFare.updated_by = req.auth.data.name; + // let serviceFare = new ServiceFare(); + // serviceFare.service = service; + // serviceFare.faretype = ft.faretype_id; + // serviceFare.serviceClass = serviceClass; + // serviceFare.fare = String(sc.fare ?? 0); + // serviceFare.created_by = req.auth.data.name; + // serviceFare.updated_by = req.auth.data.name; - const saved = await queryRunner.manager.save(serviceFare); - savedServiceFares.push(saved); - } - } + // const saved = await queryRunner.manager.save(serviceFare); + // savedServiceFares.push(saved); + // } + // } - await queryRunner.commitTransaction(); + // await queryRunner.commitTransaction(); - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, savedServiceFares); + // return ReturnHelper.successResponseAny(res, 200, Language.lang.success_update, savedServiceFares); - } catch (e: unknown) { - await queryRunner.rollbackTransaction(); - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); - } finally { - await queryRunner.release(); - } - } + // } catch (e: unknown) { + // await queryRunner.rollbackTransaction(); + // log.error(e); + // const err = e as Error; + // return ReturnHelper.errorResponse(res, 400, 401, Language.lang.failed_view, err.message); + // } finally { + // await queryRunner.release(); + // } + // } - static async delete(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Service Fare'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("ID"), - hard: Joi.bool().optional().allow("").label("Is hard delete?"), - }); + // static async delete(req: Request, res: Response, next: NextFunction): Promise { + // /* + // #swagger.tags = ['Service Fare'] + // #swagger.security = [{ "bearerAuth": [] }] + // #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } + // #swagger.parameters['hard'] = { in: 'path', description: 'Is Hard Delete', required: false, type: 'boolean' } + // */ + // try { + // const schema = Joi.object().keys({ + // id: Joi.string().uuid().required().label("ID"), + // hard: Joi.bool().optional().allow("").label("Is hard delete?"), + // }); - const param: { id: string; hard: boolean } = await schema.validateAsync(req.params); + // const param: { id: string; hard: boolean } = await schema.validateAsync(req.params); - let affected = 0; - if (!param.hard) { - let serviceFare: ServiceFare = await ServiceFareModel.list({ "ServiceFare.id": param.id }).then((q) => q.getOne()); + // let affected = 0; + // if (!param.hard) { + // let serviceFare: ServiceFare = await ServiceFareModel.list({ "ServiceFare.id": param.id }).then((q) => q.getOne()); - if (!serviceFare) throw { message: "Service Fare " + Language.lang.failed_not_found }; + // if (!serviceFare) throw { message: "Service Fare " + Language.lang.failed_not_found }; - serviceFare.deleted_by = req.auth.data.name; - serviceFare.deleted_at = moment().toDate(); - await OrmHelper.DB.manager.save(serviceFare); - affected = 1; - } else { - const repo = OrmHelper.DB.getRepository(ServiceFare); - affected = (await repo.delete({ id: param.id })).affected ?? 0; - } + // serviceFare.deleted_by = req.auth.data.name; + // serviceFare.deleted_at = moment().toDate(); + // await OrmHelper.DB.manager.save(serviceFare); + // affected = 1; + // } else { + // const repo = OrmHelper.DB.getRepository(ServiceFare); + // affected = (await repo.delete({ id: param.id })).affected ?? 0; + // } - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); - } - } + // if (affected > 0) { + // return ReturnHelper.successResponseAny(res, 200, Language.lang.success_delete, {}); + // } else { + // return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); + // } + // } catch (e: unknown) { + // log.error(e); + // const err = e as Error; + // return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); + // } + // } - static async restore(req: Request, res: Response, next: NextFunction): Promise { - /* - #swagger.tags = ['Service Fare'] - #swagger.security = [{ "bearerAuth": [] }] - #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } - */ - try { - const schema = Joi.object().keys({ - id: Joi.string().uuid().required().label("ID"), - }); + // static async restore(req: Request, res: Response, next: NextFunction): Promise { + // /* + // #swagger.tags = ['Service Fare'] + // #swagger.security = [{ "bearerAuth": [] }] + // #swagger.parameters['id'] = { in: 'path', required: true, type: 'string' } + // */ + // try { + // const schema = Joi.object().keys({ + // id: Joi.string().uuid().required().label("ID"), + // }); - const param: any = await schema.validateAsync(req.params); + // const param: any = await schema.validateAsync(req.params); - const repo = OrmHelper.DB.getRepository(ServiceFare); + // const repo = OrmHelper.DB.getRepository(ServiceFare); - const affected = (await repo.restore({ id: param.id })).affected ?? 0; + // const affected = (await repo.restore({ id: param.id })).affected ?? 0; - if (affected > 0) { - return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); - } else { - return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); - } - } catch (e: unknown) { - log.error(e); - const err = e as Error; - return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); - } - } + // if (affected > 0) { + // return ReturnHelper.successResponseAny(res, 200, Language.lang.success_restore, {}); + // } else { + // return ReturnHelper.errorResponse(res, 404, 401, Language.lang.failed_not_found, ""); + // } + // } catch (e: unknown) { + // log.error(e); + // const err = e as Error; + // return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_restore, err.message); + // } + // } } diff --git a/src/routes/private.ts b/src/routes/private.ts index 5a1009d..de6046d 100644 --- a/src/routes/private.ts +++ b/src/routes/private.ts @@ -186,9 +186,9 @@ export class RoutePrivate { app.get('/api/service-fare/option', ServiceFareController.option) app.post('/api/service-fare/create', ServiceFareController.create) app.get('/api/service-fare/detail/:id', ServiceFareController.detail) - app.put('/api/service-fare/update/:id', ServiceFareController.update) - app.delete('/api/service-fare/delete/:id/:hard', ServiceFareController.delete) - app.put('/api/service-fare/restore/:id', ServiceFareController.restore) + // app.put('/api/service-fare/update/:id', ServiceFareController.update) + // app.delete('/api/service-fare/delete/:id/:hard', ServiceFareController.delete) + // app.put('/api/service-fare/restore/:id', ServiceFareController.restore) app.get('/api/service-package/list', ServicePackageController.list) app.post('/api/service-package/create', ServicePackageController.create)