diff --git a/database/factories/DataImportFactory.php b/database/factories/DataImportFactory.php index 14cd8689..3ce06156 100644 --- a/database/factories/DataImportFactory.php +++ b/database/factories/DataImportFactory.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataImport\Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\DataImport; class DataImportFactory extends Factory @@ -18,7 +18,7 @@ public function definition() 'params' => [], 'successful' => 0, 'failed' => 0, - 'status' => Statuses::Waiting, + 'status' => Status::Waiting->value, ]; } } diff --git a/database/factories/ImportFactory.php b/database/factories/ImportFactory.php index a25318c9..06f56f6c 100644 --- a/database/factories/ImportFactory.php +++ b/database/factories/ImportFactory.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataImport\Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; class ImportFactory extends Factory @@ -18,7 +18,7 @@ public function definition() 'params' => [], 'successful' => 0, 'failed' => 0, - 'status' => Statuses::Waiting, + 'status' => Status::Waiting->value, ]; } } diff --git a/src/Commands/CancelStuck.php b/src/Commands/CancelStuck.php index 548ffc1c..be40b8b9 100644 --- a/src/Commands/CancelStuck.php +++ b/src/Commands/CancelStuck.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataImport\Commands; use Illuminate\Console\Command; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; class CancelStuck extends Command @@ -15,7 +15,7 @@ class CancelStuck extends Command public function handle() { Import::stuck()->update([ - 'status' => Statuses::Cancelled, + 'status' => Status::Cancelled->value, 'batch' => null, ]); } diff --git a/src/Commands/Purge.php b/src/Commands/Purge.php index e585764f..9affc1ac 100644 --- a/src/Commands/Purge.php +++ b/src/Commands/Purge.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataImport\Commands; use Illuminate\Console\Command; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; class Purge extends Command @@ -16,7 +16,7 @@ public function handle() { Import::expired()->notDeletable() ->update([ - 'status' => Statuses::Cancelled, + 'status' => Status::Cancelled->value, 'batch' => null, ]); diff --git a/src/EnumServiceProvider.php b/src/EnumServiceProvider.php index 551c6a5d..0d8363dc 100644 --- a/src/EnumServiceProvider.php +++ b/src/EnumServiceProvider.php @@ -2,14 +2,10 @@ namespace LaravelEnso\DataImport; -use LaravelEnso\DataImport\Enums\CssClasses; -use LaravelEnso\DataImport\Enums\Statuses; use LaravelEnso\Enums\EnumServiceProvider as ServiceProvider; class EnumServiceProvider extends ServiceProvider { public $register = [ - 'importCssClasses' => CssClasses::class, - 'importStatuses' => Statuses::class, ]; } diff --git a/src/Enums/CssClass.php b/src/Enums/CssClass.php new file mode 100644 index 00000000..d1d690cd --- /dev/null +++ b/src/Enums/CssClass.php @@ -0,0 +1,20 @@ + 'is-info', - self::Processing => 'is-warning', - self::Processed => 'is-primary', - self::ExportingRejected => 'is-danger', - self::Finalized => 'is-success', - self::Cancelled => 'is-danger', - ]; -} diff --git a/src/Enums/Status.php b/src/Enums/Status.php new file mode 100644 index 00000000..9db4eae1 --- /dev/null +++ b/src/Enums/Status.php @@ -0,0 +1,66 @@ + 'waiting', + self::Processing => 'processing', + self::Processed => 'processed', + self::ExportingRejected => 'exporting rejected', + self::Finalized => 'finalized', + self::Cancelled => 'cancelled', + }; + } + + public static function registerBy(): string + { + return 'importStatuses'; + } + + public static function isRunning(int $status): bool + { + return match ($status) { + self::Waiting->value => true, + self::Processing->value => true, + self::Processed->value => false, + self::ExportingRejected->value => false, + self::Finalized->value => false, + self::Cancelled->value => false, + }; + } + + public static function isDeletable(int $status): bool + { + return match ($status) { + self::Waiting->value => false, + self::Processing->value => false, + self::Processed->value => false, + self::ExportingRejected->value => false, + self::Finalized->value => true, + self::Cancelled->value => true, + }; + } + + public static function deletable(): array + { + return [self::Finalized->value, self::Cancelled->value]; + } +} diff --git a/src/Enums/Statuses.php b/src/Enums/Statuses.php deleted file mode 100644 index 3ec93ef7..00000000 --- a/src/Enums/Statuses.php +++ /dev/null @@ -1,39 +0,0 @@ - 'waiting', - self::Processing => 'processing', - self::Processed => 'processed', - self::ExportingRejected => 'exporting rejected', - self::Finalized => 'finalized', - self::Cancelled => 'cancelled', - ]; - - public static function running(): array - { - return [self::Waiting, self::Processing]; - } - - public static function deletable(): array - { - return [self::Finalized, self::Cancelled]; - } - - public static function isDeletable(int $status): bool - { - return in_array($status, self::deletable()); - } -} diff --git a/src/Jobs/Finalize.php b/src/Jobs/Finalize.php index 713b8263..0030dfd0 100644 --- a/src/Jobs/Finalize.php +++ b/src/Jobs/Finalize.php @@ -8,7 +8,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Config; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; use LaravelEnso\DataImport\Notifications\ImportDone; use LaravelEnso\DataImport\Services\Notifiables; @@ -24,7 +24,7 @@ public function __construct(private Import $import) public function handle() { - $this->import->update(['status' => Statuses::Finalized]); + $this->import->update(['status' => Status::Finalized->value]); $this->notify(); } diff --git a/src/Models/Import.php b/src/Models/Import.php index 8930e7b3..5c0ac6fb 100644 --- a/src/Models/Import.php +++ b/src/Models/Import.php @@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Illuminate\Support\Traits\Conditionable; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Exceptions\Import as Exception; use LaravelEnso\DataImport\Jobs\Import as Job; use LaravelEnso\DataImport\Services\Options; @@ -85,17 +85,17 @@ public function scopeStuck(Builder $query): Builder ->subHours(Config::get('enso.imports.cancelStuckAfter')); return $query->where('created_at', '<', $cancelStuckAfter) - ->whereNotIn('status', [Statuses::Finalized, Statuses::Cancelled]); + ->whereNotIn('status', [Status::Finalized->value, Status::Cancelled->value]); } public function scopeDeletable(Builder $query): Builder { - return $query->whereIn('status', Statuses::deletable()); + return $query->whereIn('status', Status::deletable()); } public function scopeNotDeletable(Builder $query): Builder { - return $query->whereNotIn('status', Statuses::deletable()); + return $query->whereNotIn('status', Status::deletable()); } public function extensions(): array @@ -155,32 +155,32 @@ public function status(): int { return $this->running() ? $this->status - : Statuses::Finalized; + : Status::Finalized->value; } public function waiting(): bool { - return $this->status === Statuses::Waiting; + return $this->status === Status::Waiting->value; } public function cancelled(): bool { - return $this->status === Statuses::Cancelled; + return $this->status === Status::Cancelled->value; } public function processing(): bool { - return $this->status === Statuses::Processing; + return $this->status === Status::Processing->value; } public function finalized(): bool { - return $this->status === Statuses::Finalized; + return $this->status === Status::Finalized->value; } public function running(): bool { - return in_array($this->status, Statuses::running()); + return Status::isRunning($this->status); } public function template(): Template @@ -235,8 +235,8 @@ public function upload(UploadedFile $file): array public function forceDelete() { - if (! Statuses::isDeletable($this->status)) { - $this->update(['status' => Statuses::Cancelled]); + if (! Status::isDeletable($this->status)) { + $this->update(['status' => Status::Cancelled->value]); } $this->delete(); @@ -252,7 +252,7 @@ public function purge(): void public function delete() { - if (! Statuses::isDeletable($this->status)) { + if (! Status::isDeletable($this->status)) { throw Exception::deleteRunningImport(); } @@ -274,7 +274,7 @@ public function cancel() $this->batch()?->cancel(); $this->update([ - 'status' => Statuses::Cancelled, + 'status' => Status::Cancelled->value, 'batch' => null, ]); } @@ -302,7 +302,7 @@ public function restart(): void $this->update([ 'successful' => 0, 'failed' => 0, - 'status' => Statuses::Waiting, + 'status' => Status::Waiting->value, ]); $this->import(); diff --git a/src/Services/Exporters/Rejected.php b/src/Services/Exporters/Rejected.php index a1f257a1..569dbe31 100644 --- a/src/Services/Exporters/Rejected.php +++ b/src/Services/Exporters/Rejected.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; use LaravelEnso\DataImport\Models\RejectedChunk; use LaravelEnso\DataImport\Models\RejectedImport; @@ -31,7 +31,7 @@ public function __construct(private Import $import) public function handle(): void { - $this->import->update(['status' => Statuses::ExportingRejected]); + $this->import->update(['status' => Status::ExportingRejected->value]); $this->initWriter(); diff --git a/src/Services/Importers/Import.php b/src/Services/Importers/Import.php index dd10624f..6e0fd3db 100644 --- a/src/Services/Importers/Import.php +++ b/src/Services/Importers/Import.php @@ -8,7 +8,7 @@ use LaravelEnso\DataImport\Contracts\AfterHook; use LaravelEnso\DataImport\Contracts\Authenticates; use LaravelEnso\DataImport\Contracts\BeforeHook; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Jobs\Finalize; use LaravelEnso\DataImport\Jobs\RejectedExport; use LaravelEnso\DataImport\Jobs\Sheet; @@ -36,7 +36,7 @@ public function handle(): void private function prepare(): self { if ($this->import->waiting()) { - $this->import->update(['status' => Statuses::Processing]); + $this->import->update(['status' => Status::Processing->value]); } return $this; diff --git a/src/Tables/Builders/Import.php b/src/Tables/Builders/Import.php index 3870f3ca..23cb6357 100644 --- a/src/Tables/Builders/Import.php +++ b/src/Tables/Builders/Import.php @@ -4,7 +4,7 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\DB; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import as Model; use LaravelEnso\Tables\Contracts\ConditionalActions; use LaravelEnso\Tables\Contracts\Table; @@ -31,8 +31,8 @@ public function render(array $row, string $action): bool return match ($action) { 'download-rejected' => $row['rejected'] !== null, 'download' => $hasFile, - 'cancel' => in_array($row['status'], Statuses::running()), - 'restart' => $hasFile && $row['status'] === Statuses::Cancelled, + 'cancel' => Status::isRunning($row['status']), + 'restart' => $hasFile && $row['status'] === Status::Cancelled->value, default => true, }; } diff --git a/src/Tables/Templates/imports.json b/src/Tables/Templates/imports.json index a23d84c6..43dc52bd 100644 --- a/src/Tables/Templates/imports.json +++ b/src/Tables/Templates/imports.json @@ -72,7 +72,7 @@ "label": "Status", "name": "status", "data": "data_imports.status", - "enum": "LaravelEnso\\DataImport\\Enums\\Statuses", + "enum": "LaravelEnso\\DataImport\\Enums\\Status", "meta": [ "sortable", "slot" diff --git a/tests/features/DataImportTest.php b/tests/features/DataImportTest.php index 8a34db27..ed4e9751 100644 --- a/tests/features/DataImportTest.php +++ b/tests/features/DataImportTest.php @@ -6,7 +6,7 @@ use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use LaravelEnso\DataImport\Enums\Statuses; +use LaravelEnso\DataImport\Enums\Status; use LaravelEnso\DataImport\Models\Import; use LaravelEnso\Tables\Traits\Tests\Datatable; use LaravelEnso\UserGroups\Models\UserGroup; @@ -109,12 +109,12 @@ public function download() public function cant_destroy_while_running() { $this->attach(self::ImportFile); - $this->model->update(['status' => Statuses::Processing]); + $this->model->update(['status' => Status::Processing->value]); $response = $this->delete(route('import.destroy', [$this->model->id], false)); $response->assertStatus(488); - $this->model->update(['status' => Statuses::Finalized]); + $this->model->update(['status' => Status::Finalized->value]); } /** @test */