summaryrefslogtreecommitdiff
path: root/lib/aggiedit
diff options
context:
space:
mode:
authorLogan Hunt <loganhunt@simponic.xyz>2022-04-06 12:55:12 -0600
committerLogan Hunt <loganhunt@simponic.xyz>2022-04-06 12:55:12 -0600
commit4067339e8cf9dbd624a8fa0183d7a29c73b2e762 (patch)
tree4f995e706c10bf5b9a58c078cfb843c76e31c8a0 /lib/aggiedit
parent66d871e5461814dad58872eb832a58f2c3c5111b (diff)
downloadaggiedit-4067339e8cf9dbd624a8fa0183d7a29c73b2e762.tar.gz
aggiedit-4067339e8cf9dbd624a8fa0183d7a29c73b2e762.zip
Models for upload and post; generated liveview controller for posts
Diffstat (limited to 'lib/aggiedit')
-rw-r--r--lib/aggiedit/rooms.ex96
-rw-r--r--lib/aggiedit/rooms/post.ex21
-rw-r--r--lib/aggiedit/uploads.ex104
-rw-r--r--lib/aggiedit/uploads/upload.ex21
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