79 lines
1.7 KiB
Elixir
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
|