api = new Api(); } public function syncUsers() { $karatUsers = \App\Services\Karat\User::all(); $dbUsers = User::all(); $this->insertUsersFromKarat($karatUsers, $dbUsers); $this->removeUsersThatAreNotInKaratAnymore($karatUsers, $dbUsers); } private function insertUsersFromKarat(Collection $karatUsers, Collection $dbUsers) { $emailsToSkip = $dbUsers->pluck('email' )->intersect( $karatUsers->pluck('email')); $karatUsersToInsert = $karatUsers->reject(function ($item) use ($emailsToSkip) { return $emailsToSkip->contains($item->email); })->map(function ($item) { $arrayToInsert = $item->toArray(); $arrayToInsert['created_at'] = Carbon::now(); $arrayToInsert['updated_at'] = Carbon::now(); return $arrayToInsert; }); User::insert($karatUsersToInsert->toArray()); } private function removeUsersThatAreNotInKaratAnymore( Collection $karatUsers, Collection $dbUsers ) { $emailsInDbThatAreNotInKaratAnymore = $dbUsers->pluck('email' )->diff( $karatUsers->pluck('email')); User::whereIn('email', $emailsInDbThatAreNotInKaratAnymore)->delete(); } public function syncClients() { $karatClients = Client::all(); $dbClients = \App\Models\Client::all(); $this->insertClientsFromKarat($karatClients, $dbClients); $this->removeClientsThatAreNotInKaratAnymore($karatClients, $dbClients); } private function insertClientsFromKarat( Collection $karatClients, Collection $dbClients ) { $clientsToSkip = $dbClients->pluck('code' )->intersect( $karatClients->pluck('code')); $karatClientsToInsert = $karatClients->reject(function ($item) use ($clientsToSkip) { return $clientsToSkip->contains($item->code); })->map(function ($item) { $arrayToInsert = $item->toArray(); $arrayToInsert['created_at'] = Carbon::now(); $arrayToInsert['updated_at'] = Carbon::now(); return $arrayToInsert; }); \App\Models\Client::insert($karatClientsToInsert->toArray()); } private function removeClientsThatAreNotInKaratAnymore( Collection $karatClients, Collection $dbClients ) { dd('finish me'); } public function syncProjects() { $karatProjects = Project::all(); $dbProjects = \App\Models\Project::all(); $this->insertProjectsFromKarat($karatProjects, $dbProjects); $this->removeProjectsThatAreNotInKaratAnymore($karatProjects, $dbProjects); } }