diff --git a/platform/lib/platform/material.ex b/platform/lib/platform/material.ex index cb819428f..ed9474bde 100644 --- a/platform/lib/platform/material.ex +++ b/platform/lib/platform/material.ex @@ -316,12 +316,10 @@ defmodule Platform.Material do |> Repo.insert() end - def create_media_audited(user_or_token, attrs \\ %{}, opts \\ []) - - def create_media_audited(%User{} = user, attrs, opts) do + def create_media_audited(user_or_token, attrs \\ %{}, opts \\ []) when is_struct(user_or_token, User) or is_struct(user_or_token, APIToken) do changeset = %Media{} - |> Media.changeset(attrs, user) + |> Media.changeset(attrs, user_or_token) cond do !changeset.valid? -> @@ -329,7 +327,7 @@ defmodule Platform.Material do true -> Repo.transaction(fn -> - changeset = change_media(%Media{}, attrs, user) + changeset = change_media(%Media{}, attrs, user_or_token) {:ok, media} = changeset @@ -337,84 +335,42 @@ defmodule Platform.Material do if Keyword.get(opts, :post_updates, true) do {:ok, _} = - Updates.change_from_media_creation(media, user) + Updates.change_from_media_creation(media, user_or_token) |> Updates.create_update_from_changeset() end - # Automatically tag new incidents created by regular users, if desirable - user_project_membership = - Projects.get_project_membership_by_user_and_project_id(user, media.project_id) - - {:ok, media} = - with false <- Enum.member?([:owner, :manager], user_project_membership.role), - new_tags_json <- System.get_env("AUTOTAG_USER_INCIDENTS"), - false <- is_nil(new_tags_json) or String.trim(new_tags_json) == "", - {:ok, new_tags} <- Jason.decode(new_tags_json), - false <- Enum.empty?(new_tags) do - {:ok, new_media} = - update_media_attribute_audited( - media, - Attribute.get_attribute(:tags), - Accounts.get_auto_account(), - %{"attr_tags" => (media.attr_tags || []) ++ new_tags} - ) + if is_struct(user_or_token, User) do + # Automatically tag new incidents created by regular users, if desirable + user_project_membership = + Projects.get_project_membership_by_user_and_project_id(user_or_token, media.project_id) + + {:ok, media} = + with false <- Enum.member?([:owner, :manager], user_project_membership.role), + new_tags_json <- System.get_env("AUTOTAG_USER_INCIDENTS"), + false <- is_nil(new_tags_json) or String.trim(new_tags_json) == "", + {:ok, new_tags} <- Jason.decode(new_tags_json), + false <- Enum.empty?(new_tags) do + {:ok, new_media} = + update_media_attribute_audited( + media, + Attribute.get_attribute(:tags), + Accounts.get_auto_account(), + %{"attr_tags" => (media.attr_tags || []) ++ new_tags} + ) + + {:ok, new_media} + else + _ -> {:ok, media} + end - {:ok, new_media} - else - _ -> {:ok, media} + # Subscribe the creator + {:ok, _} = subscribe_user(media, user_or_token) end - # Subscribe the creator - {:ok, _} = subscribe_user(media, user) - - # Upload media, if provided - for url <- Ecto.Changeset.get_field(changeset, :urls_parsed) do - {:ok, version} = - create_media_version_audited(media, user, %{ - upload_type: :direct, - status: :pending, - source_url: url, - media_id: media.id - }) - - archive_media_version(version) - end - - # Schedule metadata generation - schedule_media_auto_metadata_update(media) - - media - end) - end - end - - def create_media_audited(%APIToken{} = api_token, attrs, opts) do - changeset = - %Media{} - |> Media.changeset(attrs, api_token) - - cond do - !changeset.valid? -> - {:error, changeset} - - true -> - Repo.transaction(fn -> - changeset = change_media(%Media{}, attrs, api_token) - - {:ok, media} = - changeset - |> Repo.insert() - - if Keyword.get(opts, :post_updates, true) do - {:ok, _} = - Updates.change_from_media_creation(media, api_token) - |> Updates.create_update_from_changeset() - end - # Upload media, if provided for url <- Ecto.Changeset.get_field(changeset, :urls_parsed) do {:ok, version} = - create_media_version_audited(media, api_token, %{ + create_media_version_audited(media, user_or_token, %{ upload_type: :direct, status: :pending, source_url: url,