Files
jandl-taskmanager-app/be/app/Services/Karat/KaratService.php
T
2023-03-03 14:22:39 +01:00

101 lines
2.8 KiB
PHP

<?php
namespace App\Services\Karat;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Arr;
use Illuminate\Support\Collection;
class KaratService
{
private Api $api;
public function __construct()
{
$this->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);
}
}