product_transformer = new ProductTransformer($service->company); } public function find(string $id): mixed { return $this->service->sdk->FindById('Item', $id); } public function syncToNinja(array $records): void { foreach ($records as $record) { $ninja_data = $this->product_transformer->qbToNinja($record); if ($product = $this->findProduct($ninja_data['id'])) { $product->fill($ninja_data); $product->save(); } } } public function syncToForeign(array $records): void { } private function findProduct(string $key): ?Product { $search = Product::query() ->withTrashed() ->where('company_id', $this->service->company->id) ->where('sync->qb_id', $key); if($search->count() == 0) { $product = ProductFactory::create($this->service->company->id, $this->service->company->owner()->id); $sync = new ProductSync(); $sync->qb_id = $key; $product->sync = $sync; return $product; } elseif($search->count() == 1) { return $this->service->settings->product->update_record ? $search->first() : null; } return null; } public function sync(string $id, string $last_updated): void { $qb_record = $this->find($id); if($ninja_record = $this->findProduct($id)) { if(Carbon::parse($last_updated) > Carbon::parse($ninja_record->updated_at)) { $ninja_data = $this->product_transformer->qbToNinja($qb_record); $ninja_record->fill($ninja_data); $ninja_record->save(); } } } }