Finish post updates

This commit is contained in:
2023-02-18 16:51:18 +11:00
parent e70546bc9c
commit 0c5384e79e

View File

@@ -2,23 +2,68 @@ module Adamantium
module Commands module Commands
module Posts module Posts
class Update < Command class Update < Command
include Deps["repos.post_repo", "renderers.markdown"] include Deps[
"repos.post_repo",
"renderers.markdown",
"commands.posts.add_syndication_source"
]
def call(params:) def call(params:)
slug = URI(params[:url]).path.split("/").last slug = URI(params[:url]).path.split("/").last
post = post_repo.fetch!(slug) post = post_repo.fetch!(slug)
if params.key? :replace if params.key? :replace
post_repo.update(post.id, { content = params[:replace].delete(:content).first
content: markdown.call(content: params[:replace][:content].first) name = params[:replace].delete(:name)
})
attrs_to_replace = {}
attrs_to_replace[:name] = name if name
attrs_to_replace[:content] = markdown.call(content: content) if content
post_repo.update(post.id, attrs_to_replace)
end end
if params.key? :add if params.key? :add
post_repo.tag_post(post_id: post.id, tags: params[:add][:category]) attrs_to_add = {}
syndication = params[:add].delete(:syndication).first
tags = params[:add].delete(:category)
content = params[:add].delete(:content).first
name = params[:add].delete(:name)
attrs_to_add[:name] = name if post.name.empty?
attrs_to_add[:content] = markdown.call(content: content) if post.content.empty?
params[:add].keys.each_with_object(attrs_to_add) do |attr, memo|
memo[attr] = params[:add][attr].first if post.fetch(attr, nil).nil?
end
post_repo.update(post.id, attrs_to_add) unless attrs_to_add.empty?
post_repo.tag_post(post_id: post.id, tags: tags) if tags && !tags.empty?
add_syndication_source.call(post.id, "", syndication) if syndication && !syndication.empty?
end end
if params.key? :delete if params.key? :delete
if params[:delete].is_a? Hash
tags = params[:delete][:category]
tags&.each do |tag|
post_repo.remove_tag(post_id: post.id, tag: tag)
end
elsif params[:delete].is_a? Array
if params[:delete].delete("category")
post.tags.each do |tag|
post_repo.remove_tag(post_id: post.id, tag: tag.label)
end
end
attrs = {}
params[:delete].each do |attr|
attrs[attr.to_sym] = nil
end
post_repo.update(post.id, attrs) unless attrs.empty?
end
end end
end end
end end