From 4edb5361f85047a8df544539bbfd40626c5d3ecd Mon Sep 17 00:00:00 2001
From: Oliver Tale-Yazdi
Date: Sun, 24 Nov 2024 02:56:06 +0700
Subject: [PATCH] Events page (#30)
* Add events
Signed-off-by: Oliver Tale-Yazdi
* typo
Signed-off-by: Oliver Tale-Yazdi
* Events
Signed-off-by: Oliver Tale-Yazdi
* build
Signed-off-by: Oliver Tale-Yazdi
* fix merge
Signed-off-by: Oliver Tale-Yazdi
---------
Signed-off-by: Oliver Tale-Yazdi
---
build.sh | 2 +
lib/phoenix_app/events.ex | 2 +
lib/phoenix_app/events/event.ex | 31 +++++
lib/phoenix_app/teams/event.ex | 25 ----
.../controllers/event_controller.ex | 5 +
.../controllers/page_controller.ex | 5 +-
lib/phoenix_app_web/router.ex | 1 +
.../templates/event/index.html.heex | 28 +++-
.../templates/event/show.html.heex | 131 ++++++++++++++++++
.../templates/page/index.html.heex | 30 ++--
lib/phoenix_app_web/views/event_view.ex | 54 ++++++++
.../20240713183346_create_events.exs | 8 +-
priv/repo/seeds_events.exs | 27 +++-
13 files changed, 303 insertions(+), 46 deletions(-)
create mode 100644 lib/phoenix_app/events/event.ex
delete mode 100644 lib/phoenix_app/teams/event.ex
create mode 100644 lib/phoenix_app_web/templates/event/show.html.heex
diff --git a/build.sh b/build.sh
index 57020c4..8ab17ac 100644
--- a/build.sh
+++ b/build.sh
@@ -2,4 +2,6 @@
set -e
+rm -rf _build
+
mix deps.get && MIX_ENV=prod mix compile && MIX_ENV=prod mix assets.deploy && MIX_ENV=prod mix release --overwrite && MIX_ENV=prod mix ecto.drop && MIX_ENV=prod mix ecto.setup
diff --git a/lib/phoenix_app/events.ex b/lib/phoenix_app/events.ex
index b88110f..881c920 100644
--- a/lib/phoenix_app/events.ex
+++ b/lib/phoenix_app/events.ex
@@ -7,4 +7,6 @@ defmodule PhoenixApp.Events do
def list_events do
Repo.all(from e in Event, order_by: :name)
end
+
+ def get_event!(id), do: Repo.get!(Event, id)
end
diff --git a/lib/phoenix_app/events/event.ex b/lib/phoenix_app/events/event.ex
new file mode 100644
index 0000000..d484eb5
--- /dev/null
+++ b/lib/phoenix_app/events/event.ex
@@ -0,0 +1,31 @@
+defmodule PhoenixApp.Events.Event do
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ schema "events" do
+ field :name, :string
+ field :short, :string
+ field :long, :string
+ field :links, {:array, :string}
+ field :learn_more_id, :integer, default: 0
+ field :contact, {:array, :string}
+ field :when_from, :date
+ field :when_to, :date
+ field :when_est, :string
+ field :where, :string
+ field :where_link, :string
+ field :duration, :string
+ field :historic, :boolean, default: false
+
+ timestamps()
+ end
+
+ @all [:homepage, :name, :contact, :where]
+
+ @doc false
+ def changeset(team, attrs) do
+ team
+ |> cast(attrs, @all ++ [:when_to, :when_from, :when_est, :where_link, :duration, :long, :short, :links, :historic, :learn_more_id])
+ |> validate_required(@all)
+ end
+end
diff --git a/lib/phoenix_app/teams/event.ex b/lib/phoenix_app/teams/event.ex
deleted file mode 100644
index 44000d2..0000000
--- a/lib/phoenix_app/teams/event.ex
+++ /dev/null
@@ -1,25 +0,0 @@
-defmodule PhoenixApp.Events.Event do
- use Ecto.Schema
- import Ecto.Changeset
-
- schema "events" do
- field :name, :string
- field :description, :string
- field :links, {:array, :string}
- field :contact, {:array, :string}
- field :when_from, :date
- field :when_to, :date
- field :where, :string
-
- timestamps()
- end
-
- @all [:description, :homepage, :name, :contact, :when_from, :when_to, :where]
-
- @doc false
- def changeset(team, attrs) do
- team
- |> cast(attrs, @all)
- |> validate_required(@all)
- end
-end
diff --git a/lib/phoenix_app_web/controllers/event_controller.ex b/lib/phoenix_app_web/controllers/event_controller.ex
index f1d1dd9..2a4d182 100644
--- a/lib/phoenix_app_web/controllers/event_controller.ex
+++ b/lib/phoenix_app_web/controllers/event_controller.ex
@@ -8,4 +8,9 @@ defmodule PhoenixAppWeb.EventController do
num = length(events)
render(conn, "index.html", events: events, num_events: num)
end
+
+ def show(conn, %{"id" => id}) do
+ event = Events.get_event!(id)
+ render(conn, "show.html", event: event)
+ end
end
diff --git a/lib/phoenix_app_web/controllers/page_controller.ex b/lib/phoenix_app_web/controllers/page_controller.ex
index 1d13258..66ef08d 100644
--- a/lib/phoenix_app_web/controllers/page_controller.ex
+++ b/lib/phoenix_app_web/controllers/page_controller.ex
@@ -1,8 +1,11 @@
defmodule PhoenixAppWeb.PageController do
use PhoenixAppWeb, :controller
+ alias PhoenixApp.Events
+
def index(conn, _params) do
- render(conn, "index.html")
+ events = Events.list_events()
+ render(conn, "index.html", events: events)
end
def spec(conn, _params) do
diff --git a/lib/phoenix_app_web/router.ex b/lib/phoenix_app_web/router.ex
index aaeb6c1..df08524 100644
--- a/lib/phoenix_app_web/router.ex
+++ b/lib/phoenix_app_web/router.ex
@@ -30,6 +30,7 @@ defmodule PhoenixAppWeb.Router do
get("/", PageController, :index)
get("/spec", PageController, :spec)
get("/tech", PageController, :tech)
+
resources("/events", EventController, only: [:index, :show])
resources("/clients/json", TeamJsonController, only: [:index])
resources("/clients", TeamController, only: [:index, :show])
diff --git a/lib/phoenix_app_web/templates/event/index.html.heex b/lib/phoenix_app_web/templates/event/index.html.heex
index 202533d..1b5eb58 100644
--- a/lib/phoenix_app_web/templates/event/index.html.heex
+++ b/lib/phoenix_app_web/templates/event/index.html.heex
@@ -10,18 +10,38 @@
- <%= for event <- @events do %>
- <%= link to: hd(event.links), class: "block w-full" do %>
+ <%= for event <- Enum.reject(@events, & &1.historic) do %>
+ <%= link to: Routes.event_path(@conn, :show, event), class: "block w-full" do %>