feat: more on posts

This commit is contained in:
2026-04-23 14:44:56 +02:00
parent 54f38d2aa7
commit 54b1b71aa6
2 changed files with 99 additions and 0 deletions

View File

@@ -94,6 +94,36 @@ defmodule BDS.Posts do
end
end
def delete_post(post_id) do
case Repo.get(Post, post_id) do
nil ->
{:error, :not_found}
%Post{} = post ->
delete_post_file(post)
Repo.delete!(post)
{:ok, :deleted}
end
end
def archive_post(post_id) do
case Repo.get(Post, post_id) do
nil ->
{:error, :not_found}
%Post{status: status} = post when status in [:draft, :published] ->
post
|> Post.changeset(%{status: :archived, updated_at: System.system_time(:second)})
|> Repo.update()
%Post{} = post ->
{:error,
post
|> Post.changeset(%{})
|> Ecto.Changeset.add_error(:status, "cannot archive archived post")}
end
end
def get_post!(post_id), do: Repo.get!(Post, post_id)
def rewrite_published_post(post_id) do
@@ -251,6 +281,19 @@ defmodule BDS.Posts do
end
end
defp delete_post_file(%Post{project_id: _project_id, file_path: file_path}) when file_path in [nil, ""], do: :ok
defp delete_post_file(%Post{} = post) do
project = Projects.get_project!(post.project_id)
full_path = Path.join(Projects.project_data_dir(project), post.file_path)
case File.rm(full_path) do
:ok -> :ok
{:error, :enoent} -> :ok
{:error, reason} -> {:error, reason}
end
end
defp has_attr?(attrs, key) do
Map.has_key?(attrs, key) or Map.has_key?(attrs, Atom.to_string(key))
end