From 05e865ef412f58c9ecb81b08c3e5e5b6ba07574b Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Tue, 21 May 2024 22:43:17 +0200 Subject: [PATCH] Fixed import --- .../Importers/ClockifyTimeEntriesImporter.php | 3 +++ app/Service/Import/Importers/DefaultImporter.php | 15 ++++++++------- .../Import/Importers/TogglDataImporter.php | 7 +++++-- .../Import/Importers/TogglTimeEntriesImporter.php | 3 +++ .../Import/Importer/ImporterTestAbstract.php | 7 +++++++ 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/app/Service/Import/Importers/ClockifyTimeEntriesImporter.php b/app/Service/Import/Importers/ClockifyTimeEntriesImporter.php index eb893053..cb0d03f9 100644 --- a/app/Service/Import/Importers/ClockifyTimeEntriesImporter.php +++ b/app/Service/Import/Importers/ClockifyTimeEntriesImporter.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Service\Import\Importers; +use App\Enums\Role; use App\Models\TimeEntry; use Exception; use Illuminate\Support\Carbon; @@ -59,6 +60,8 @@ class ClockifyTimeEntriesImporter extends DefaultImporter $memberId = $this->memberImportHelper->getKey([ 'user_id' => $userId, 'organization_id' => $this->organization->getKey(), + ], [ + 'role' => Role::Placeholder->value, ]); $clientId = null; if ($record['Client'] !== '') { diff --git a/app/Service/Import/Importers/DefaultImporter.php b/app/Service/Import/Importers/DefaultImporter.php index c79add23..bcf85b01 100644 --- a/app/Service/Import/Importers/DefaultImporter.php +++ b/app/Service/Import/Importers/DefaultImporter.php @@ -4,7 +4,6 @@ declare(strict_types=1); namespace App\Service\Import\Importers; -use App\Enums\Role; use App\Models\Client; use App\Models\Member; use App\Models\Organization; @@ -69,11 +68,7 @@ abstract class DefaultImporter implements ImporterContract $this->userImportHelper = new ImportDatabaseHelper(User::class, ['email'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->belongsToOrganization($this->organization); - }, function (User $user) { - $user->organizations()->attach($this->organization, [ - 'role' => Role::Placeholder->value, - ]); - }, validate: [ + }, null, validate: [ 'name' => [ 'required', 'max:255', @@ -86,7 +81,13 @@ abstract class DefaultImporter implements ImporterContract $this->memberImportHelper = new ImportDatabaseHelper(Member::class, ['user_id', 'organization_id'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->whereBelongsTo($this->organization, 'organization'); - }); + }, null, validate: [ + 'role' => [ + 'required', + 'string', + 'in:placeholder', + ], + ]); $this->projectImportHelper = new ImportDatabaseHelper(Project::class, ['name', 'organization_id'], true, function (Builder $builder) { /** @var Builder $builder */ return $builder->where('organization_id', $this->organization->id); diff --git a/app/Service/Import/Importers/TogglDataImporter.php b/app/Service/Import/Importers/TogglDataImporter.php index 136e7fb0..60763e41 100644 --- a/app/Service/Import/Importers/TogglDataImporter.php +++ b/app/Service/Import/Importers/TogglDataImporter.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Service\Import\Importers; +use App\Enums\Role; use Exception; use Spatie\TemporaryDirectory\TemporaryDirectory; use ValueError; @@ -93,10 +94,12 @@ class TogglDataImporter extends DefaultImporter 'timezone' => $workspaceUser->timezone ?? 'UTC', 'is_placeholder' => true, ], (string) $workspaceUser->uid); - $memberId = $this->memberImportHelper->getKey([ + $this->memberImportHelper->getKey([ 'user_id' => $userId, 'organization_id' => $this->organization->getKey(), - ], [], $userId); + ], [ + 'role' => Role::Placeholder->value, + ], $userId); } foreach ($projects as $project) { diff --git a/app/Service/Import/Importers/TogglTimeEntriesImporter.php b/app/Service/Import/Importers/TogglTimeEntriesImporter.php index 6ea004ab..b3fc33aa 100644 --- a/app/Service/Import/Importers/TogglTimeEntriesImporter.php +++ b/app/Service/Import/Importers/TogglTimeEntriesImporter.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Service\Import\Importers; +use App\Enums\Role; use App\Models\TimeEntry; use Exception; use Illuminate\Support\Carbon; @@ -59,6 +60,8 @@ class TogglTimeEntriesImporter extends DefaultImporter $memberId = $this->memberImportHelper->getKey([ 'user_id' => $userId, 'organization_id' => $this->organization->getKey(), + ], [ + 'role' => Role::Placeholder->value, ]); $clientId = null; if ($record['Client'] !== '') { diff --git a/tests/Unit/Service/Import/Importer/ImporterTestAbstract.php b/tests/Unit/Service/Import/Importer/ImporterTestAbstract.php index a8ea1d3d..c9953db7 100644 --- a/tests/Unit/Service/Import/Importer/ImporterTestAbstract.php +++ b/tests/Unit/Service/Import/Importer/ImporterTestAbstract.php @@ -4,7 +4,9 @@ declare(strict_types=1); namespace Tests\Unit\Service\Import\Importer; +use App\Enums\Role; use App\Models\Client; +use App\Models\Member; use App\Models\Project; use App\Models\Tag; use App\Models\Task; @@ -28,6 +30,11 @@ class ImporterTestAbstract extends TestCase $this->assertSame(null, $user1->password); $this->assertSame('Peter Tester', $user1->name); $this->assertSame('peter.test@email.test', $user1->email); + $members = Member::all(); + $this->assertCount(1, $members); + $member1 = $members->firstWhere('user_id', $user1->getKey()); + $this->assertNotNull($member1); + $this->assertSame(Role::Placeholder->value, $member1->role); $clients = Client::all(); $this->assertCount(1, $clients); $client1 = $clients->firstWhere('name', 'Big Company');