defmodule Core.Posts do
  @moduledoc false
  import Ecto.Changeset
  import Ecto.Query

  alias Core.Repo

  def changeset(%Schema.Post{} = post, attrs) do
    post
    |> cast(attrs, [:title, :body])
    |> validate_required([:body])
  end

  def create_post(attrs) do
    %Schema.Post{}
    |> changeset(attrs)
    |> Repo.insert()
  end

  def update_post(post, attrs) do
    post
    |> changeset(attrs)
    |> Repo.update()
  end

  def get_post!(id) do
    Repo.get!(Schema.Post, id)
  end

  def list_posts do
    query =
      from post in Schema.Post,
        order_by: [desc: post.inserted_at]

    Repo.all(query)
  end
end