diff options
Diffstat (limited to 'lib/aggiedit')
-rw-r--r-- | lib/aggiedit/rooms.ex | 96 | ||||
-rw-r--r-- | lib/aggiedit/rooms/post.ex | 21 | ||||
-rw-r--r-- | lib/aggiedit/uploads.ex | 104 | ||||
-rw-r--r-- | lib/aggiedit/uploads/upload.ex | 21 |
4 files changed, 242 insertions, 0 deletions
diff --git a/lib/aggiedit/rooms.ex b/lib/aggiedit/rooms.ex index eac2b65..fb10c4b 100644 --- a/lib/aggiedit/rooms.ex +++ b/lib/aggiedit/rooms.ex @@ -108,4 +108,100 @@ defmodule Aggiedit.Rooms do nil -> create_room(%{domain: domain}) end end + + alias Aggiedit.Rooms.Post + + @doc """ + Returns the list of posts. + + ## Examples + + iex> list_posts() + [%Post{}, ...] + + """ + def list_posts do + Repo.all(Post) + end + + @doc """ + Gets a single post. + + Raises `Ecto.NoResultsError` if the Post does not exist. + + ## Examples + + iex> get_post!(123) + %Post{} + + iex> get_post!(456) + ** (Ecto.NoResultsError) + + """ + def get_post!(id), do: Repo.get!(Post, id) + + @doc """ + Creates a post. + + ## Examples + + iex> create_post(%{field: value}) + {:ok, %Post{}} + + iex> create_post(%{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def create_post(attrs \\ %{}) do + %Post{} + |> Post.changeset(attrs) + |> Repo.insert() + end + + @doc """ + Updates a post. + + ## Examples + + iex> update_post(post, %{field: new_value}) + {:ok, %Post{}} + + iex> update_post(post, %{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def update_post(%Post{} = post, attrs) do + post + |> Post.changeset(attrs) + |> Repo.update() + end + + @doc """ + Deletes a post. + + ## Examples + + iex> delete_post(post) + {:ok, %Post{}} + + iex> delete_post(post) + {:error, %Ecto.Changeset{}} + + """ + def delete_post(%Post{} = post) do + Repo.delete(post) + end + + @doc """ + Returns an `%Ecto.Changeset{}` for tracking post changes. + + ## Examples + + iex> change_post(post) + %Ecto.Changeset{data: %Post{}} + + """ + def change_post(%Post{} = post, attrs \\ %{}) do + Post.changeset(post, attrs) + end end diff --git a/lib/aggiedit/rooms/post.ex b/lib/aggiedit/rooms/post.ex new file mode 100644 index 0000000..c6ca24a --- /dev/null +++ b/lib/aggiedit/rooms/post.ex @@ -0,0 +1,21 @@ +defmodule Aggiedit.Rooms.Post do + use Ecto.Schema + import Ecto.Changeset + + schema "posts" do + field :body, :string + field :title, :string + field :user_id, :id + field :upload_id, :id + field :room_id, :id + + timestamps() + end + + @doc false + def changeset(post, attrs) do + post + |> cast(attrs, [:title, :body]) + |> validate_required([:title, :body]) + end +end diff --git a/lib/aggiedit/uploads.ex b/lib/aggiedit/uploads.ex new file mode 100644 index 0000000..2dcdcc3 --- /dev/null +++ b/lib/aggiedit/uploads.ex @@ -0,0 +1,104 @@ +defmodule Aggiedit.Uploads do + @moduledoc """ + The Uploads context. + """ + + import Ecto.Query, warn: false + alias Aggiedit.Repo + + alias Aggiedit.Uploads.Upload + + @doc """ + Returns the list of uploads. + + ## Examples + + iex> list_uploads() + [%Upload{}, ...] + + """ + def list_uploads do + Repo.all(Upload) + end + + @doc """ + Gets a single upload. + + Raises `Ecto.NoResultsError` if the Upload does not exist. + + ## Examples + + iex> get_upload!(123) + %Upload{} + + iex> get_upload!(456) + ** (Ecto.NoResultsError) + + """ + def get_upload!(id), do: Repo.get!(Upload, id) + + @doc """ + Creates a upload. + + ## Examples + + iex> create_upload(%{field: value}) + {:ok, %Upload{}} + + iex> create_upload(%{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def create_upload(attrs \\ %{}) do + %Upload{} + |> Upload.changeset(attrs) + |> Repo.insert() + end + + @doc """ + Updates a upload. + + ## Examples + + iex> update_upload(upload, %{field: new_value}) + {:ok, %Upload{}} + + iex> update_upload(upload, %{field: bad_value}) + {:error, %Ecto.Changeset{}} + + """ + def update_upload(%Upload{} = upload, attrs) do + upload + |> Upload.changeset(attrs) + |> Repo.update() + end + + @doc """ + Deletes a upload. + + ## Examples + + iex> delete_upload(upload) + {:ok, %Upload{}} + + iex> delete_upload(upload) + {:error, %Ecto.Changeset{}} + + """ + def delete_upload(%Upload{} = upload) do + Repo.delete(upload) + end + + @doc """ + Returns an `%Ecto.Changeset{}` for tracking upload changes. + + ## Examples + + iex> change_upload(upload) + %Ecto.Changeset{data: %Upload{}} + + """ + def change_upload(%Upload{} = upload, attrs \\ %{}) do + Upload.changeset(upload, attrs) + end +end diff --git a/lib/aggiedit/uploads/upload.ex b/lib/aggiedit/uploads/upload.ex new file mode 100644 index 0000000..f5f028d --- /dev/null +++ b/lib/aggiedit/uploads/upload.ex @@ -0,0 +1,21 @@ +defmodule Aggiedit.Uploads.Upload do + use Ecto.Schema + import Ecto.Changeset + + schema "uploads" do + field :file, :string + field :mime, :string + field :size, :integer + + belongs_to :user, Aggiedit.Accounts.User + + timestamps() + end + + @doc false + def changeset(upload, attrs) do + upload + |> cast(attrs, [:file, :mime, :size]) + |> validate_required([:file, :mime, :size]) + end +end |