sloanelybutsurely.com/lib/core/posts.ex

79 lines
1.7 KiB
Elixir

defmodule Core.Posts do
@moduledoc false
alias Core.Posts.Post
def get!(id) do
Core.Repo.get!(Schema.Post, id)
end
def get_published_blog!(%Date{} = publish_date, slug) when is_binary(slug) do
Post.Query.published()
|> Post.Query.where_publish_date_and_slug(publish_date, slug)
|> Core.Repo.one!()
end
def get_published_status!(id) do
Post.Query.published()
|> Post.Query.where_kind(:status)
|> Core.Repo.get!(id)
end
@recent_posts_count 10
def get_all_recent_blogs do
Post.Query.recent_blogs(@recent_posts_count)
|> Core.Repo.all()
end
def get_all_recent_statuses do
Post.Query.recent_statuses(@recent_posts_count)
|> Core.Repo.all()
end
def change_post(%Schema.Post{} = post \\ %Schema.Post{}, attrs) do
Post.content_changeset(post, attrs)
end
def create_post(attrs) do
attrs
|> change_post()
|> Core.Repo.insert()
end
def update_post(%Schema.Post{} = post, attrs) do
post
|> change_post(attrs)
|> Core.Repo.update()
end
def create_or_update_post(%Schema.Post{} = post, attrs) do
post
|> change_post(attrs)
|> Core.Repo.insert_or_update()
end
def publish_post(%Schema.Post{} = post, published_at \\ DateTime.utc_now()) do
post
|> Post.publish_changeset(published_at)
|> Core.Repo.update()
end
def delete_post(%Schema.Post{} = post, deleted_at \\ DateTime.utc_now()) do
post
|> Post.delete_changeset(deleted_at)
|> Core.Repo.update()
end
def unpublish_post(%Schema.Post{} = post) do
post
|> Post.unpublish_changeset()
|> Core.Repo.update()
end
def undelete_post(%Schema.Post{} = post) do
post
|> Post.undelete_changeset()
|> Core.Repo.update()
end
end