From 569d27f0b9bce7143e2cc83ef92dfd0982767bad Mon Sep 17 00:00:00 2001 From: Massedil Date: Tue, 10 Jun 2025 15:00:07 +0200 Subject: [PATCH] fix: Allow updating media in admin_settings_medias by UUID Fixes #1769 --- lib/mobilizon/admin/setting.ex | 9 ++++++++- lib/mobilizon/medias/medias.ex | 7 +++++++ test/mobilizon/media/media_test.exs | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/mobilizon/admin/setting.ex b/lib/mobilizon/admin/setting.ex index cf363a61c..d356ca394 100644 --- a/lib/mobilizon/admin/setting.ex +++ b/lib/mobilizon/admin/setting.ex @@ -73,13 +73,20 @@ defmodule Mobilizon.Admin.SettingMedia do |> unique_constraint(:group, name: :admin_settings_medias_group_name_index) end - # # In case the provided media is an existing one + # In case the provided media is an existing one (identified by id) @spec put_media(Changeset.t(), map) :: Changeset.t() defp put_media(%Changeset{} = changeset, %{media: %{media_id: id}}) do %Media{} = media = Medias.get_media!(id) put_assoc(changeset, :media, media) end + # In case the provided media is an existing one (identified by uuid) + @spec put_media(Changeset.t(), map) :: Changeset.t() + defp put_media(%Changeset{} = changeset, %{media: %{media_uuid: uuid}}) do + %Media{} = media = Medias.get_media_by_uuid!(uuid) + put_assoc(changeset, :media, media) + end + # In case it's a new media defp put_media(%Changeset{} = changeset, %{media: %{media: media}}) do {:ok, media} = upload_media(media) diff --git a/lib/mobilizon/medias/medias.ex b/lib/mobilizon/medias/medias.ex index 497e086b4..b12d1083a 100644 --- a/lib/mobilizon/medias/medias.ex +++ b/lib/mobilizon/medias/medias.ex @@ -35,6 +35,13 @@ defmodule Mobilizon.Medias do @spec get_media_by_uuid(String.t()) :: Media.t() | nil def get_media_by_uuid(uuid), do: Repo.get_by(Media, uuid: uuid) + @doc """ + Get a single media by uuid. + Raises `Ecto.NoResultsError` if the media does not exist. + """ + @spec get_media_by_uuid!(String.t()) :: Media.t() | nil + def get_media_by_uuid!(uuid), do: Repo.get_by!(Media, uuid: uuid) + @doc """ Get a media by its URL. """ diff --git a/test/mobilizon/media/media_test.exs b/test/mobilizon/media/media_test.exs index 4463c3a24..02c6751be 100644 --- a/test/mobilizon/media/media_test.exs +++ b/test/mobilizon/media/media_test.exs @@ -24,6 +24,11 @@ defmodule Mobilizon.MediaTest do assert Medias.get_media!(media.id).id == media.id end + test "get_media_by_uuid!/1 returns the media with given uuid" do + media = insert(:media) + assert Medias.get_media_by_uuid!(media.uuid).uuid == media.uuid + end + test "create_media/1 with valid data creates a media" do assert {:ok, %Media{} = media} = Medias.create_media(Map.put(@valid_attrs, :actor_id, insert(:actor).id))