Задать вопрос
@fasewyby

Как улучшить код?

public function update(Post $post, array $data): void
{
    try {
        $image = $post->image;

        if ($image) {
            $this->storage->delete($image);
        }

        $tag_id = $data['tag_id'];
        unset($data['tag_id']);
        $this->db->beginTransaction();
        $post->update($data);
        $post->tags()->sync($tag_id);
        $this->db->commit();
    } catch (\Exception $e) {
        $this->db->rollBack();
        throw new DbException("Ошибка обновления поста: {$e->getMessage()}");
    }
}

public function delete(Post $post): void
{
    try {
        $image = $post->image;

        if ($image) {
            $this->storage->delete($image);
        }

        $this->db->beginTransaction();
        $post->tags()->detach();
        $post->category()->dissociate();
        $post->delete();
        $this->db->commit();
    } catch (\Exception $e) {
        $this->db->rollBack();
        throw new DbException("Ошибка удаления поста: {$e->getMessage()}");
    }
}


Есть класс PostQueries. Я просто запросы убрал в отдельный класс. В обоих методах есть код с удалением картинок (превью к посту), и он одинаковый. Как избавиться от дублирования? При удалении самого поста, надо удалить картинку. При обновлении - удалить старую (если она есть), поставить новую. Новая вставляется в $data.
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
pLavrenov
@pLavrenov
Разработка сайтов
Уф.

1. Добавь реквест файл с проверкой необходимых данных
2. Удаляй старый файл после завершения транзакции
3) Не удаляй в потоке, а кроном чисти не добавленные постам картинки раз в день (месяц)
4) Если очень надо сразу то через обсервер на события updating updated deleting или deleted (в зависимости когда надо) повесь событие а на событие слушатель который будет удалять картинки
5) Вместо unset -> Arr::only
6) DB::transaction конструкцию вместо того что сейчас, чтобы не следить за методами которые можно забыть выполнить
7) Exception -> Throwable для трейса
8) Названия массивов во множественном числе
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы