Commit eb9ff522 authored by Ola Hneini's avatar Ola Hneini Committed by Yassine Doghri
Browse files

feat(episodes): replace soft delete with permanent delete

+ add constraint to prevent deleting an episode when published
parent 03457287
Loading
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -147,10 +147,6 @@ class AddEpisodes extends Migration
            'updated_at' => [
                'type' => 'DATETIME',
            ],
            'deleted_at' => [
                'type' => 'DATETIME',
                'null' => true,
            ],
        ]);
        $this->forge->addPrimaryKey('id');
        $this->forge->addUniqueKey(['podcast_id', 'slug']);
+0 −6
Original line number Diff line number Diff line
@@ -207,12 +207,6 @@ class AuthSeeder extends Seeder
            ],
            [
                'name' => 'delete',
                'description' =>
                    'Delete an episode of a podcast without removing it from the database',
                'has_permission' => ['podcast_admin'],
            ],
            [
                'name' => 'delete_permanently',
                'description' =>
                    'Delete all occurrences of an episode of a podcast from the database',
                'has_permission' => ['podcast_admin'],
+0 −1
Original line number Diff line number Diff line
@@ -78,7 +78,6 @@ use RuntimeException;
 * @property Time|null $published_at;
 * @property Time $created_at;
 * @property Time $updated_at;
 * @property Time|null $deleted_at;
 *
 * @property Person[] $persons;
 * @property Soundbite[] $soundbites;
+10 −2
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ declare(strict_types=1);

namespace App\Entities\Media;

use App\Models\MediaModel;
use CodeIgniter\Database\BaseResult;
use CodeIgniter\Entity\Entity;
use CodeIgniter\Files\File;

@@ -101,9 +103,15 @@ class BaseMedia extends Entity
        return $this;
    }

    public function deleteFile(): void
    public function deleteFile(): bool
    {
        helper('media');
        unlink(media_path($this->file_path));
        return unlink(media_path($this->file_path));
    }

    public function delete(): bool|BaseResult
    {
        $mediaModel = new MediaModel();
        return $mediaModel->delete($this->id, true);
    }
}
+11 −5
Original line number Diff line number Diff line
@@ -69,11 +69,13 @@ class Image extends BaseMedia
        return $this;
    }

    public function deleteFile(): void
    public function deleteFile(): bool
    {
        parent::deleteFile();
        if (parent::deleteFile()) {
            return $this->deleteSizes();
        }

        $this->deleteSizes();
        return false;
    }

    public function saveSizes(): void
@@ -89,12 +91,16 @@ class Image extends BaseMedia
        }
    }

    private function deleteSizes(): void
    private function deleteSizes(): bool
    {
        // delete all derived sizes
        foreach (array_keys($this->sizes) as $name) {
            $pathProperty = $name . '_path';
            unlink(media_path($this->{$pathProperty}));
            if (! unlink(media_path($this->{$pathProperty}))) {
                return false;
            }
        }

        return true;
    }
}
Loading