error_info = [ 'message' => $e->getMessage(), 'errors' => $e->getTrace() ]; $stsLog->result = StsLog::STATUS_FAILED; $stsLog->is_retry = true; $stsLog->save(); return JSONResponse::Success(['is_warning' => true, 'message' => "Failed to sync data with indokargo data, don't worry, we will sync data later"]); } catch(\Throwable $th) { DB::rollBack(); $stsLog->error_info = [ 'message' => $th->getMessage(), 'errors' => $th->getTrace() ]; $stsLog->result = StsLog::STATUS_FAILED; $stsLog->save(); throw $th; } } //-- END UTILITIES //------------------------------------------------------------------------ public static function createTVAddress(Request $request, int $tvFk, int $lastSeq = 0) { $seq = $lastSeq + 1; /** * local id = TV FK, partnerId = ik_address_id * Why not new tv request id as local_id? * - New Tv request data will be deleted after TV data is inserted into the local DB */ $stsLog = new StsLog(); $stsLog->partner = StsLog::PARTNER_INDOKARGO; $stsLog->is_outgoing = false; $stsLog->module = StsLog::MODULE_TV; $stsLog->service_name = StsLog::SERVICE_CREATE_TV_ADDRESS; $stsLog->local_id = $tvFk; $stsLog->partner_id = null; $stsLog->seq = $seq; $stsLog->request_data = $request->all(); $stsLog->request_time = Carbon::now(); return self::_HttpTransaction($stsLog, Function() use($tvFk, $request, $stsLog) { $request->validate(['code' => 'required|string']); $result = Http::indokargo()->post('tv/address/create', $request->all()); $res = $result->throw()->json(); // update stsLog $stsLog->response_data = $res; $stsLog->response_time = Carbon::now(); self::_checkIkResponse($res); $ikAddress = $res['data']['0']; $ikAddressId = $ikAddress['id']; $stsLog->partner_id = $ikAddressId; // check ik address id is exist (almost impossible to happen, 0.01%) $isDuplicateIkAddressId = TV::where([ ['ik_address_id', '=', $ikAddressId], ['id', '!=', $tvFk] ])->first(); if($isDuplicateIkAddressId) throw new \Exception("IK Address ID Already exist in current db ($ikAddressId)"); DB::beginTransaction(); $tv = Tv::findOrFail($tvFk); $tv->ik_address_id = $ikAddressId; $tv->save(); $stsLog->result = StsLog::STATUS_SUCCESS; $stsLog->save(); DB::commit(); return JSONResponse::Success(['is_warning' => false, 'message' => 'Success To Save Data']); }); } public static function updateTVAddress(Request $request, int $tvFk, String $ikAddressId, int $lastSeq = 0) { $seq = $lastSeq + 1; $request->merge(['ik_address_id' => $ikAddressId]); $stsLog = new StsLog(); $stsLog->partner = StsLog::PARTNER_INDOKARGO; $stsLog->is_outgoing = false; $stsLog->module = StsLog::MODULE_TV; $stsLog->service_name = StsLog::SERVICE_UPDATE_TV_ADDRESS; $stsLog->local_id = $tvFk; $stsLog->partner_id = $ikAddressId; $stsLog->seq = $seq; $stsLog->request_data = $request->all(); $stsLog->request_time = Carbon::now(); return self::_HttpTransaction($stsLog, Function() use($stsLog, $request) { $request->validate(['code' => 'required|string', 'ik_address_id' => 'required|string']); $result = Http::indokargo()->post('tv/address/update-tv', $request->all()); $res = $result->throw()->json(); // update stsLog $stsLog->response_data = $res; $stsLog->response_time = Carbon::now(); self::_checkIkResponse($res); $stsLog->result = StsLog::STATUS_SUCCESS; $stsLog->save(); DB::commit(); return JSONResponse::Success(['message' => "Success to save data"]); }); } public static function changeStatusAddress(Request $request, int $tvFk, String $ikAddressId, int $lastSeq = 0) { $seq = $lastSeq + 1; $request->merge(['ik_address_id' => $ikAddressId]); $stsLog = new StsLog(); $stsLog->partner = StsLog::PARTNER_INDOKARGO; $stsLog->is_outgoing = false; $stsLog->module = StsLog::MODULE_TV; $stsLog->service_name = StsLog::SERVICE_CHANGE_STATUS_TV_ADDRESS; $stsLog->local_id = $tvFk; $stsLog->partner_id = $request->ik_address_id; $stsLog->seq = $seq; $stsLog->request_data = $request->all(); $stsLog->request_time = Carbon::now(); return self::_HttpTransaction($stsLog, Function() use($stsLog, $request) { $request->validate(['ik_address_id' => 'required|string', 'is_active'=> 'required|boolean']); $result = Http::indokargo()->post('tv/address/change-status', $request->all()); $res = $result->throw()->json(); // update stsLog $stsLog->response_data = $res; $stsLog->response_time = Carbon::now(); self::_checkIkResponse($res); $stsLog->result = StsLog::STATUS_SUCCESS; $stsLog->save(); DB::commit(); return JSONResponse::Success(['is_warning' => false, 'message' => 'Success To Change Status']); }); } } ?>