From a2c0152d74971fbacb6a66af59b6511cb16f35c1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 14 Apr 2025 21:59:50 +0300 Subject: [PATCH] upgrade done --- database/factories/ExportFactory.php | 4 +- src/Commands/Purge.php | 4 +- src/EnumServiceProvider.php | 2 - src/Enums/Status.php | 58 ++++++++++++++++++++++++++++ src/Enums/Statuses.php | 37 ------------------ src/Models/Export.php | 26 ++++++------- src/Services/ExcelExport.php | 8 ++-- 7 files changed, 79 insertions(+), 60 deletions(-) create mode 100644 src/Enums/Status.php delete mode 100644 src/Enums/Statuses.php diff --git a/database/factories/ExportFactory.php b/database/factories/ExportFactory.php index 562e172..e870686 100644 --- a/database/factories/ExportFactory.php +++ b/database/factories/ExportFactory.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataExport\Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; -use LaravelEnso\DataExport\Enums\Statuses; +use LaravelEnso\DataExport\Enums\Status; use LaravelEnso\DataExport\Models\Export; class ExportFactory extends Factory @@ -16,7 +16,7 @@ public function definition() 'name' => null, 'entries' => 0, 'total' => 0, - 'status' => Statuses::Waiting, + 'status' => Status::Waiting->value, ]; } } diff --git a/src/Commands/Purge.php b/src/Commands/Purge.php index 2340f05..7a6996e 100644 --- a/src/Commands/Purge.php +++ b/src/Commands/Purge.php @@ -3,7 +3,7 @@ namespace LaravelEnso\DataExport\Commands; use Illuminate\Console\Command; -use LaravelEnso\DataExport\Enums\Statuses; +use LaravelEnso\DataExport\Enums\Status; use LaravelEnso\DataExport\Models\Export; class Purge extends Command @@ -15,7 +15,7 @@ class Purge extends Command public function handle() { Export::expired()->notDeletable() - ->update(['status' => Statuses::Cancelled]); + ->update(['status' => Status::Cancelled->value]); Export::expired()->deletable()->get()->each->delete(); } diff --git a/src/EnumServiceProvider.php b/src/EnumServiceProvider.php index 5c52a40..8a5c040 100644 --- a/src/EnumServiceProvider.php +++ b/src/EnumServiceProvider.php @@ -2,12 +2,10 @@ namespace LaravelEnso\DataExport; -use LaravelEnso\DataExport\Enums\Statuses; use LaravelEnso\Enums\EnumServiceProvider as ServiceProvider; class EnumServiceProvider extends ServiceProvider { public $register = [ - 'exportStatuses' => Statuses::class, ]; } diff --git a/src/Enums/Status.php b/src/Enums/Status.php new file mode 100644 index 0000000..bc94a5a --- /dev/null +++ b/src/Enums/Status.php @@ -0,0 +1,58 @@ + 'waiting', + self::Processing => 'processing', + self::Finalized => 'finalized', + self::Cancelled => 'cancelled', + self::Failed => 'failed', + }; + } + + public function isRunning(): bool + { + return match ($this) { + self::Waiting->value => true, + self::Processing->value => true, + self::Finalized->value => false, + self::Cancelled->value => false, + self::Failed->value => false, + }; + } + + public function isDeletable(): bool + { + return match ($this) { + self::Waiting => false, + self::Processing => false, + self::Finalized => true, + self::Cancelled => true, + self::Failed => true, + }; + } + + public static function registerBy(): string + { + return 'exportStatuses'; + } + + public static function deletable(): array + { + return [self::Finalized->value, self::Cancelled->value, self::Failed->value]; + } +} diff --git a/src/Enums/Statuses.php b/src/Enums/Statuses.php deleted file mode 100644 index 7840a40..0000000 --- a/src/Enums/Statuses.php +++ /dev/null @@ -1,37 +0,0 @@ - 'waiting', - self::Processing => 'processing', - self::Finalized => 'finalized', - self::Cancelled => 'cancelled', - self::Failed => 'failed', - ]; - - public static function running(): array - { - return [self::Waiting, self::Processing]; - } - - public static function deletable(): array - { - return [self::Finalized, self::Cancelled, self::Failed]; - } - - public static function isDeletable(int $status): bool - { - return in_array($status, self::deletable()); - } -} diff --git a/src/Models/Export.php b/src/Models/Export.php index f897b9f..4821a76 100644 --- a/src/Models/Export.php +++ b/src/Models/Export.php @@ -13,7 +13,7 @@ use Illuminate\Support\Str; use LaravelEnso\DataExport\Contracts\CustomCount; use LaravelEnso\DataExport\Contracts\ExportsExcel as AsyncExcel; -use LaravelEnso\DataExport\Enums\Statuses; +use LaravelEnso\DataExport\Enums\Status; use LaravelEnso\DataExport\Exceptions\Exception; use LaravelEnso\DataExport\Notifications\ExportDone; use LaravelEnso\DataExport\Services\ExcelExport as AsyncExporter; @@ -57,39 +57,39 @@ public function cancel(): void throw Exception::cannotBeCancelled(); } - $this->update(['status' => Statuses::Cancelled]); + $this->update(['status' => Status::Cancelled->value]); } public function cancelled(): bool { - return $this->status === Statuses::Cancelled; + return $this->status === Status::Cancelled->value; } public function failed(): bool { - return $this->status === Statuses::Failed; + return $this->status === Status::Failed->value; } public function running(): bool { - return in_array($this->status, Statuses::running()); + return Status::from($this->status)->isRunning(); } public function finalized(): bool { - return $this->status === Statuses::Finalized; + return $this->status === Status::Finalized->value; } public function operationType(): int { - return IOTypes::Export; + return IOTypes::Export; //TODO upgrade when IO package is upgraded } public function status(): int { return $this->running() ? $this->status - : Statuses::Finalized; + : Status::Finalized->value; } public function progress(): ?int @@ -150,7 +150,7 @@ private static function syncExcel(SyncExcel $exporter): self { $export = self::factory()->create([ 'name' => $exporter->filename(), - 'status' => Statuses::Processing, + 'status' => Status::Processing->value, 'total' => 0, ]); @@ -178,7 +178,7 @@ private static function syncExcel(SyncExcel $exporter): self $file = File::attach(...$args); - $export->fill(['status' => Statuses::Finalized]) + $export->fill(['status' => Status::Finalized->value]) ->file()->associate($file) ->save(); @@ -201,7 +201,7 @@ public function updateProgress(int $entries) public function delete() { - if (! Statuses::isDeletable($this->status)) { + if (! Status::from($this->status)->isDeletable()) { throw Exception::deleteRunningExport(); } @@ -222,11 +222,11 @@ public function scopeExpired(Builder $query): Builder 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()); } } diff --git a/src/Services/ExcelExport.php b/src/Services/ExcelExport.php index 87a4ee5..86dc929 100644 --- a/src/Services/ExcelExport.php +++ b/src/Services/ExcelExport.php @@ -11,7 +11,7 @@ use LaravelEnso\DataExport\Contracts\CustomRowAction; use LaravelEnso\DataExport\Contracts\ExportsExcel; use LaravelEnso\DataExport\Contracts\Notifies; -use LaravelEnso\DataExport\Enums\Statuses; +use LaravelEnso\DataExport\Enums\Status; use LaravelEnso\DataExport\Models\Export; use LaravelEnso\DataExport\Notifications\ExportDone; use LaravelEnso\DataExport\Notifications\ExportError; @@ -89,7 +89,7 @@ private function initWriter(): self private function start(): self { - $this->export->update(['status' => Statuses::Processing]); + $this->export->update(['status' => Status::Processing->value]); return $this; } @@ -174,7 +174,7 @@ private function finalize(): self $file = File::attach(...$args); - $this->export->fill(['status' => Statuses::Finalized]) + $this->export->fill(['status' => Status::Finalized->value]) ->file()->associate($file) ->save(); @@ -243,7 +243,7 @@ private function emailSubject(): string private function failed(): void { - $this->export->update(['status' => Statuses::Failed]); + $this->export->update(['status' => Status::Failed->value]); Storage::delete($this->path()); $this->notifyError(); $this->closeWriter();