Add price and filter homepage

This commit is contained in:
2023-12-04 00:54:16 +00:00
parent 02e6033467
commit 09433c76fc
7 changed files with 35 additions and 2 deletions

View File

@@ -21,6 +21,19 @@ defmodule Wish.Wishlist do
Repo.all(Item)
end
@doc """
Returns the list of unreceived items.
## Examples
iex> list_available_items()
[%Item{}, ...]
"""
def list_available_items do
Repo.all(from i in Item, where: not i.received)
end
@doc """
Gets a single item.

View File

@@ -9,6 +9,7 @@ defmodule Wish.Wishlist.Item do
field :received, :boolean, default: false
field :desire, :integer
field :image_url, :string
field :price, :integer
timestamps(type: :utc_datetime)
end
@@ -16,7 +17,7 @@ defmodule Wish.Wishlist.Item do
@doc false
def changeset(item, attrs) do
item
|> cast(attrs, [:title, :description, :url, :received, :desire, :image_url])
|> cast(attrs, [:title, :description, :url, :price, :received, :desire, :image_url])
|> validate_required([:url])
end

View File

@@ -12,7 +12,14 @@ defmodule WishWeb.HomeLive.Index do
_ -> false
end
{:ok, assign(socket, :items, Wishlist.list_items()) |> assign(:grid, grid?)}
items =
if socket.assigns.current_user do
Wishlist.list_items()
else
Wishlist.list_available_items()
end
{:ok, assign(socket, :items, items) |> assign(:grid, grid?)}
end
@impl true

View File

@@ -21,6 +21,7 @@ defmodule WishWeb.ItemLive.FormComponent do
>
<.input field={@form[:title]} type="text" label="Title" />
<.input field={@form[:description]} type="text" label="Description" />
<.input field={@form[:price]} type="number" min="0" step="any" label="Price" />
<.input field={@form[:url]} type="text" label="Url" />
<.input field={@form[:image_url]} type="text" label="Image URL" />
<.input field={@form[:desire]} type="number" label="Desire" />

View File

@@ -14,6 +14,7 @@
>
<:col :let={{_id, item}} label="Title"><%= item.title %></:col>
<:col :let={{_id, item}} label="Description"><%= item.description %></:col>
<:col :let={{_id, item}} label="Price"><%= item.price %></:col>
<:col :let={{_id, item}} label="Desire"><%= item.desire %></:col>
<:action :let={{id, item}}>
<.link

View File

@@ -6,6 +6,7 @@
<.simple_form for={@form} id="item-form" phx-change="validate" phx-submit="save">
<.input field={@form[:title]} type="text" label="Title" />
<.input field={@form[:description]} type="text" label="Description" />
<.input field={@form[:price]} type="number" min="0" step="any" label="Price" />
<.input field={@form[:url]} type="text" label="Url" />
<.input field={@form[:image_url]} type="text" label="Image URL" />
<.input field={@form[:desire]} type="number" label="Desire" />

View File

@@ -0,0 +1,9 @@
defmodule Wish.Repo.Migrations.AddItemPrice do
use Ecto.Migration
def change do
alter table("items") do
add :price, :integer
end
end
end