chore: refactoring of Repo.get/get! usages

This commit is contained in:
2026-05-01 17:20:08 +02:00
parent f6425de51d
commit 3505355980
23 changed files with 192 additions and 89 deletions

View File

@@ -1,13 +1,13 @@
defmodule BDS.Desktop.ShellLive.ChatEditor.MessageBuild do
@moduledoc false
alias BDS.{AI, Repo}
alias BDS.AI
alias BDS.AI.ChatConversation
alias BDS.Desktop.ShellData
alias BDS.Desktop.ShellLive.ChatEditor.{ModelSelection, ToolSurfaces, ToolTracking}
def build(%{current_tab: %{type: :chat, id: conversation_id}} = assigns) do
case Repo.get(ChatConversation, conversation_id) do
case AI.get_chat_conversation(conversation_id) do
nil ->
nil

View File

@@ -3,9 +3,9 @@ defmodule BDS.Desktop.ShellLive.CliSync do
import Phoenix.Component, only: [assign: 3]
alias BDS.Media.Media
alias BDS.{Media, Posts}
alias BDS.Media.Media, as: MediaRecord
alias BDS.Posts.Post
alias BDS.Repo
alias BDS.UI.Workbench
@doc """
@@ -78,8 +78,8 @@ defmodule BDS.Desktop.ShellLive.CliSync do
defp maybe_refresh_tab_meta(socket, "post", post_id, action) when action in [:created, :updated] do
maybe_put_tab_meta(socket, :post, post_id, fn ->
case Repo.get(Post, post_id) do
%Post{} = post -> %{title: post.title || post.slug || post.id, subtitle: Atom.to_string(post.status || :draft)}
case Posts.get_post(post_id) do
%Post{} = post -> %{title: post.title || post.slug || post.id, subtitle: Atom.to_string(post.status)}
_other -> nil
end
end)
@@ -87,8 +87,8 @@ defmodule BDS.Desktop.ShellLive.CliSync do
defp maybe_refresh_tab_meta(socket, "media", media_id, action) when action in [:created, :updated] do
maybe_put_tab_meta(socket, :media, media_id, fn ->
case Repo.get(Media, media_id) do
%Media{} = media -> %{title: media.title || media.filename || media.id, subtitle: media.filename || media.mime_type || "media"}
case Media.get_media(media_id) do
%MediaRecord{} = media -> %{title: media.title || media.filename || media.id, subtitle: media.filename || media.mime_type || "media"}
_other -> nil
end
end)

View File

@@ -4,7 +4,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
use Phoenix.Component
alias BDS.Desktop.ShellData
alias BDS.{MCP, Repo, Scripts, Scripting, Templates}
alias BDS.{MCP, Scripts, Scripting, Templates}
alias BDS.Scripts.Script
alias BDS.Templates.Template
@@ -27,7 +27,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def save_script(socket, reload, append_output) do
%{id: script_id} = socket.assigns.current_tab
case Repo.get(Script, script_id) do
case Scripts.get_script(script_id) do
nil -> reload.(socket, socket.assigns.workbench)
%Script{} = script ->
draft = current_script_draft(socket.assigns, script)
@@ -57,7 +57,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def check_script(socket, reload, append_output) do
%{id: script_id} = socket.assigns.current_tab
case Repo.get(Script, script_id) do
case Scripts.get_script(script_id) do
nil -> reload.(socket, socket.assigns.workbench)
%Script{} = script ->
case Scripting.validate(current_script_draft(socket.assigns, script)["content"] || "") do
@@ -70,7 +70,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def run_script(socket, reload, append_output) do
%{id: script_id} = socket.assigns.current_tab
case Repo.get(Script, script_id) do
case Scripts.get_script(script_id) do
nil -> reload.(socket, socket.assigns.workbench)
%Script{} = script ->
draft = current_script_draft(socket.assigns, script)
@@ -109,7 +109,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def save_template(socket, reload, append_output) do
%{id: template_id} = socket.assigns.current_tab
case Repo.get(Template, template_id) do
case Templates.get_template(template_id) do
nil -> reload.(socket, socket.assigns.workbench)
%Template{} = template ->
draft = current_template_draft(socket.assigns, template)
@@ -129,7 +129,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def validate_template(socket, reload, append_output) do
%{id: template_id} = socket.assigns.current_tab
case Repo.get(Template, template_id) do
case Templates.get_template(template_id) do
nil -> reload.(socket, socket.assigns.workbench)
%Template{} = template ->
case MCP.validate_template(current_template_draft(socket.assigns, template)["content"] || "") do
@@ -149,7 +149,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
end
def build_script(%{current_tab: %{type: :scripts, id: script_id}} = assigns) do
case Repo.get(Script, script_id) do
case Scripts.get_script(script_id) do
nil -> nil
%Script{} = script ->
draft = current_script_draft(assigns, script)
@@ -171,7 +171,7 @@ defmodule BDS.Desktop.ShellLive.CodeEntityEditor do
def build_script(_assigns), do: nil
def build_template(%{current_tab: %{type: :templates, id: template_id}} = assigns) do
case Repo.get(Template, template_id) do
case Templates.get_template(template_id) do
nil -> nil
%Template{} = template ->
draft = current_template_draft(assigns, template)

View File

@@ -6,10 +6,11 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
import Ecto.Query
alias BDS.Desktop.{FilePicker, ShellData}
alias BDS.{AI, I18n, Media, Repo}
alias BDS.{AI, I18n, Media}
alias BDS.Media.Media, as: MediaRecord
alias BDS.Media.Translation
alias BDS.Posts.Post
alias BDS.Repo
alias BDS.UI.Workbench
embed_templates "media_editor_html/*"
@@ -23,7 +24,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
def update(socket, params, reload) do
case socket.assigns.current_tab do
%{type: :media, id: media_id} ->
case Repo.get(MediaRecord, media_id) do
case Media.get_media(media_id) do
nil ->
socket
@@ -38,7 +39,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
end
def persist_socket(socket, media_id, reload, append_output) do
case Repo.get(MediaRecord, media_id) do
case Media.get_media(media_id) do
nil ->
socket
@@ -111,7 +112,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
|> append_output.(translated("Detect Language"), translated("Automatic AI actions stay gated by airplane mode."), nil, "info")
|> reload.(socket.assigns.workbench)
else
case Repo.get(MediaRecord, media_id) do
case Media.get_media(media_id) do
nil ->
socket
@@ -184,7 +185,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
def apply_ai_suggestions(socket, media_id, fields, reload, append_output) do
try do
case Repo.get(MediaRecord, media_id) do
case Media.get_media(media_id) do
nil ->
socket
@@ -375,7 +376,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
end
def build(%{current_tab: %{type: :media, id: media_id}} = assigns) do
case Repo.get(MediaRecord, media_id) do
case Media.get_media(media_id) do
nil ->
nil
@@ -468,7 +469,7 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
"title" => media.title || "",
"alt" => media.alt || "",
"caption" => media.caption || "",
"tags" => Enum.join(media.tags || [], ", "),
"tags" => Enum.join(media.tags, ", "),
"author" => media.author || "",
"language" => media.language || ""
}
@@ -567,4 +568,4 @@ defmodule BDS.Desktop.ShellLive.MediaEditor do
end
defp reload_with_assigned_workbench(socket, reload), do: reload.(socket, socket.assigns.workbench)
end
end

View File

@@ -6,8 +6,8 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
import Ecto.Query
alias BDS.Desktop.ShellData
alias BDS.{I18n, Metadata, Repo}
alias BDS.Media.Media
alias BDS.{I18n, Media, Metadata, Posts, Repo}
alias BDS.Media.Media, as: MediaRecord
alias BDS.Media.Translation, as: MediaTranslation
alias BDS.Posts.{Post, PostMedia, Translation}
alias BDS.Tags.Tag
@@ -93,7 +93,7 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
defp media(project_id) do
Repo.all(
from media in Media,
from media in MediaRecord,
where: media.project_id == ^project_id,
order_by: [desc: media.updated_at, desc: media.created_at],
select: %{id: media.id, title: media.title, original_name: media.original_name, mime_type: media.mime_type, alt: media.alt, caption: media.caption}
@@ -155,7 +155,7 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
end
defp source_language(%{type: :post, id: post_id}, metadata) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{language: language} when is_binary(language) and language != "" -> language
_other -> metadata.main_language || "en"
end
@@ -164,8 +164,8 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
end
defp source_language(%{type: :media, id: media_id}, metadata) do
case Repo.get(Media, media_id) do
%Media{language: language} when is_binary(language) and language != "" -> language
case Media.get_media(media_id) do
%MediaRecord{language: language} when is_binary(language) and language != "" -> language
_other -> metadata.main_language || "en"
end
rescue
@@ -190,7 +190,7 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
end
defp ai_fields(%{type: :post, id: post_id}, title, subtitle, page_language) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{} = post ->
[
%{key: "title", label: ShellData.translate("Title", %{}, page_language), current_value: post.title || title, suggested_value: refine_title(post.title || title), locked: false},
@@ -206,8 +206,8 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
end
defp ai_fields(%{type: :media, id: media_id}, title, _subtitle, page_language) do
case Repo.get(Media, media_id) do
%Media{} = media ->
case Media.get_media(media_id) do
%MediaRecord{} = media ->
[
%{key: "title", label: ShellData.translate("Title", %{}, page_language), current_value: media.title || title, suggested_value: refine_title(media.title || title), locked: false},
%{key: "alt", label: ShellData.translate("Alt Text", %{}, page_language), current_value: media.alt || "", suggested_value: media.alt || title, locked: false},
@@ -225,8 +225,8 @@ defmodule BDS.Desktop.ShellLive.OverlayComponents do
defp delete_details(%{type: :media, id: media_id}, page_language) do
entity_name =
case Repo.get(Media, media_id) do
%Media{} = media -> media.title || media.original_name || media.id
case Media.get_media(media_id) do
%MediaRecord{} = media -> media.title || media.original_name || media.id
_other -> media_id
end

View File

@@ -5,10 +5,11 @@ defmodule BDS.Desktop.ShellLive.PanelRenderer do
alias BDS.Desktop.ShellData
alias BDS.Git
alias BDS.Media.Media
alias BDS.Media
alias BDS.Media.Media, as: MediaRecord
alias BDS.PostLinks
alias BDS.Posts
alias BDS.Posts.Post
alias BDS.Repo
@doc "Render the active panel tab body."
def render_panel_body(assigns) do
@@ -208,7 +209,7 @@ defmodule BDS.Desktop.ShellLive.PanelRenderer do
defp related_posts(links, key) do
Enum.map(links, fn link ->
case Repo.get(Post, Map.fetch!(link, key)) do
case Posts.get_post(Map.fetch!(link, key)) do
%Post{} = post -> %{id: post.id, title: post.title || post.slug || post.id, text: link.link_text || post.slug || post.id}
_other -> nil
end
@@ -230,15 +231,15 @@ defmodule BDS.Desktop.ShellLive.PanelRenderer do
end
defp git_history_target(%{type: :post, id: post_id}) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{project_id: project_id, file_path: file_path} when file_path not in [nil, ""] -> {project_id, file_path}
_other -> nil
end
end
defp git_history_target(%{type: :media, id: media_id}) do
case Repo.get(Media, media_id) do
%Media{project_id: project_id, file_path: file_path} when file_path not in [nil, ""] -> {project_id, file_path}
case Media.get_media(media_id) do
%MediaRecord{project_id: project_id, file_path: file_path} when file_path not in [nil, ""] -> {project_id, file_path}
_other -> nil
end
end

View File

@@ -3,7 +3,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
use Phoenix.Component
alias BDS.{AI, Posts, Preview, Repo}
alias BDS.{AI, Posts, Preview}
alias BDS.Desktop.ShellData
alias BDS.Desktop.ShellLive.PostEditor.{DraftManagement, ListValues, Persistence, PostMetadata}
alias BDS.Posts.Post
@@ -84,7 +84,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
def update(socket, params, reload) do
case socket.assigns.current_tab do
%{type: :post, id: post_id} ->
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -118,7 +118,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def persist_socket(socket, post_id, action, reload, append_output) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -131,13 +131,13 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
case persist(post, draft, active_language, metadata, action) do
{:ok, record} ->
workbench = Workbench.clear_dirty(socket.assigns.workbench, :post, post_id)
normalized_form = persisted_form(Repo.get!(Post, post_id), metadata, active_language)
normalized_form = persisted_form(Posts.get_post!(post_id), metadata, active_language)
socket
|> assign(:workbench, workbench)
|> assign(:post_editor_drafts, put_nested_map(socket.assigns.post_editor_drafts, post_id, active_language, normalized_form))
|> assign(:post_editor_save_states, Map.put(socket.assigns.post_editor_save_states, post_id, save_state_for_action(action)))
|> assign(:tab_meta, Map.put(socket.assigns.tab_meta, {:post, post_id}, %{title: record_title(record, Repo.get!(Post, post_id)), subtitle: Atom.to_string(record_status(record))}))
|> assign(:tab_meta, Map.put(socket.assigns.tab_meta, {:post, post_id}, %{title: record_title(record, Posts.get_post!(post_id)), subtitle: Atom.to_string(record_status(record))}))
|> reload.(workbench)
{:error, reason} ->
@@ -149,7 +149,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def discard_socket(socket, post_id, reload, append_output) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -206,7 +206,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
normalized_mode = normalize_mode(mode)
if normalized_mode == :preview do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{} = post ->
_ = Preview.ensure_preview(post.project_id)
@@ -250,7 +250,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
|> append_output.(translated("Detect Language"), translated("Automatic AI actions stay gated by airplane mode."), nil, "info")
|> reload.(socket.assigns.workbench)
else
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -318,7 +318,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def apply_ai_suggestions(socket, post_id, fields, reload, append_output) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -366,7 +366,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def add_list_value(socket, post_id, kind, value, reload) when kind in [:tags, :categories] do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -399,7 +399,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def remove_list_value(socket, post_id, kind, value, reload) when kind in [:tags, :categories] do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
socket
@@ -417,7 +417,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
def build(%{current_tab: %{type: :post, id: post_id}} = assigns) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
nil ->
nil
@@ -446,7 +446,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
display_title: display_title(form["title"], post.slug, post.id),
subtitle: nil,
slug: post.slug || post.id,
status: post.status || :draft,
status: post.status,
dirty?: Workbench.dirty?(assigns.workbench, :post, post.id),
save_state: Map.get(assigns.post_editor_save_states, post.id, :idle),
quick_actions_open?: Map.get(assigns.post_editor_quick_actions_open, post.id, false),
@@ -454,8 +454,8 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
excerpt_expanded: Map.get(expanded, :excerpt, false),
mode: Map.get(assigns.post_editor_modes, post.id, :markdown),
editing_canonical?: editing_canonical_language?(translations, active_language, canonical_language),
can_publish?: (post.status || :draft) == :draft,
can_delete?: (post.status || :draft) == :published,
can_publish?: post.status == :draft,
can_delete?: post.status == :published,
has_published_version?: has_published_version?(post),
discard_label: discard_label(post),
discard_title: discard_title(post),

View File

@@ -3,9 +3,9 @@ defmodule BDS.Desktop.ShellLive.PostEditor.PostMetadata do
import Ecto.Query
alias BDS.{I18n, Metadata, PostLinks, Posts, Preview, Repo, Templates}
alias BDS.{I18n, Media, Metadata, PostLinks, Posts, Preview, Repo, Templates}
alias BDS.Desktop.ShellData
alias BDS.Media.Media
alias BDS.Media.Media, as: MediaRecord
alias BDS.Posts.{Post, PostMedia}
def project_metadata(nil), do: %{main_language: "en", blog_languages: []}
@@ -56,8 +56,8 @@ defmodule BDS.Desktop.ShellLive.PostEditor.PostMetadata do
)
Enum.map(rows, fn {media_id, sort_order} ->
case Repo.get(Media, media_id) do
%Media{} = media ->
case Media.get_media(media_id) do
%MediaRecord{} = media ->
%{
media_id: media.id,
has_thumbnail: String.starts_with?(to_string(media.mime_type || ""), "image/"),
@@ -83,7 +83,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor.PostMetadata do
defp related_posts(links, key) do
Enum.map(links, fn link ->
case Repo.get(Post, Map.fetch!(link, key)) do
case Posts.get_post(Map.fetch!(link, key)) do
%Post{} = post -> %{id: post.id, title: post.title || post.slug || post.id, text: link.link_text || post.slug || post.id}
_other -> nil
end

View File

@@ -3,9 +3,7 @@ defmodule BDS.Desktop.ShellLive.SettingsEditor.EditorSettings do
use Phoenix.Component
alias BDS.Persistence
alias BDS.Repo
alias BDS.Settings.Setting
alias BDS.Settings
alias BDS.Desktop.ShellData
def editor_form do
@@ -46,22 +44,11 @@ defmodule BDS.Desktop.ShellLive.SettingsEditor.EditorSettings do
end
def get_global_setting(key) do
case Repo.get(Setting, key) do
%Setting{value: value} -> value
_other -> nil
end
Settings.get_global_setting(key)
end
def put_global_setting(key, value) do
setting = Repo.get(Setting, key) || %Setting{}
setting
|> Setting.changeset(%{key: key, value: to_string(value || ""), updated_at: Persistence.now_ms()})
|> Repo.insert_or_update()
|> case do
{:ok, _setting} -> :ok
{:error, reason} -> {:error, reason}
end
Settings.put_global_setting(key, value)
end
defp editor_attrs(assigns) do

View File

@@ -2,9 +2,9 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
@moduledoc false
alias BDS.Desktop.ShellData
alias BDS.Media.Media
alias BDS.{Media, Posts}
alias BDS.Media.Media, as: MediaRecord
alias BDS.Posts.Post
alias BDS.Repo
alias BDS.UI.Registry
def tab_title(nil, _tab_meta), do: translated("Dashboard")
@@ -59,29 +59,29 @@ defmodule BDS.Desktop.ShellLive.TabHelpers do
end
def post_title(post_id) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{} = post -> post.title || post.slug || post.id
_other -> "Post"
end
end
def post_subtitle(post_id) do
case Repo.get(Post, post_id) do
case Posts.get_post(post_id) do
%Post{} = post -> post.slug || "draft"
_other -> "draft"
end
end
def media_title(media_id) do
case Repo.get(Media, media_id) do
%Media{} = media -> media.title || media.filename || media.id
case Media.get_media(media_id) do
%MediaRecord{} = media -> media.title || media.filename || media.id
_other -> "Media"
end
end
def media_subtitle(media_id) do
case Repo.get(Media, media_id) do
%Media{} = media -> media.filename || media.mime_type || "media"
case Media.get_media(media_id) do
%MediaRecord{} = media -> media.filename || media.mime_type || "media"
_other -> "media"
end
end