From 96d8f720c0dca0f3b186c394661a3999173ebfab Mon Sep 17 00:00:00 2001 From: Afonso Martins Date: Wed, 18 Sep 2024 21:48:22 +0100 Subject: [PATCH 1/3] Feat: update list_unarchived_links_by_index --- lib/cesium_link/links.ex | 6 +++++- lib/cesium_link/links/link.ex | 3 ++- .../migrations/20240918181533_add_link_scheduling.exs | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 priv/repo/migrations/20240918181533_add_link_scheduling.exs diff --git a/lib/cesium_link/links.ex b/lib/cesium_link/links.ex index 9d05aa4..5d32da7 100644 --- a/lib/cesium_link/links.ex +++ b/lib/cesium_link/links.ex @@ -64,7 +64,11 @@ defmodule CesiumLink.Links do """ def list_unarchived_links_by_index do - Repo.all(from l in Link, where: l.archived == false, order_by: [asc: l.index]) + Link + |> where([l], fragment("? > now()", l.publish_at)) + |> where([l], l.archived == false ) + |> order_by([l], asc: l.index) + |> Repo.all() end @doc """ diff --git a/lib/cesium_link/links/link.ex b/lib/cesium_link/links/link.ex index e30d9d5..c9f8d39 100644 --- a/lib/cesium_link/links/link.ex +++ b/lib/cesium_link/links/link.ex @@ -5,7 +5,7 @@ defmodule CesiumLink.Links.Link do use CesiumLink.Schema @required_fields ~w(name emoji url attention edited_at)a - @optional_fields ~w(index archived visits)a + @optional_fields ~w(index archived visits publish_at)a schema "links" do field :archived, :boolean, default: false @@ -16,6 +16,7 @@ defmodule CesiumLink.Links.Link do field :url, :string field :visits, :integer, default: 0 field :edited_at, :utc_datetime + field :publish_at, :utc_datetime timestamps(type: :utc_datetime) end diff --git a/priv/repo/migrations/20240918181533_add_link_scheduling.exs b/priv/repo/migrations/20240918181533_add_link_scheduling.exs new file mode 100644 index 0000000..2fd3685 --- /dev/null +++ b/priv/repo/migrations/20240918181533_add_link_scheduling.exs @@ -0,0 +1,9 @@ +defmodule CesiumLink.Repo.Migrations.AddLinkScheduling do + use Ecto.Migration + + def change do + alter table(:links) do + add :publish_at, :utc_datetime + end + end +end From 994214819f68954534b444bf69663341e084a5e8 Mon Sep 17 00:00:00 2001 From: Afonso Martins Date: Wed, 18 Sep 2024 21:51:14 +0100 Subject: [PATCH 2/3] Code Format --- lib/cesium_link/links.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cesium_link/links.ex b/lib/cesium_link/links.ex index 5d32da7..edab53a 100644 --- a/lib/cesium_link/links.ex +++ b/lib/cesium_link/links.ex @@ -66,7 +66,7 @@ defmodule CesiumLink.Links do def list_unarchived_links_by_index do Link |> where([l], fragment("? > now()", l.publish_at)) - |> where([l], l.archived == false ) + |> where([l], l.archived == false) |> order_by([l], asc: l.index) |> Repo.all() end From 3f115897703978f5f61c679c1a8fb654054ef286 Mon Sep 17 00:00:00 2001 From: Afonso Martins Date: Wed, 18 Sep 2024 22:48:14 +0100 Subject: [PATCH 3/3] Feat:fregment update --- lib/cesium_link/links.ex | 2 +- lib/cesium_link_web/live/link_live/form_component.ex | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/cesium_link/links.ex b/lib/cesium_link/links.ex index edab53a..b194f77 100644 --- a/lib/cesium_link/links.ex +++ b/lib/cesium_link/links.ex @@ -65,7 +65,7 @@ defmodule CesiumLink.Links do """ def list_unarchived_links_by_index do Link - |> where([l], fragment("? > now()", l.publish_at)) + |> where([l], fragment("? <= now() OR ? IS NULL", l.publish_at, l.publish_at)) |> where([l], l.archived == false) |> order_by([l], asc: l.index) |> Repo.all() diff --git a/lib/cesium_link_web/live/link_live/form_component.ex b/lib/cesium_link_web/live/link_live/form_component.ex index dff7386..ec75d1d 100644 --- a/lib/cesium_link_web/live/link_live/form_component.ex +++ b/lib/cesium_link_web/live/link_live/form_component.ex @@ -19,6 +19,7 @@ defmodule CesiumLinkWeb.LinkLive.FormComponent do <.input field={@form[:emoji]} type="emoji" label="Emoji" /> <.input field={@form[:url]} type="text" label="URL" /> <.input field={@form[:attention]} type="checkbox" label="Attention" /> + <.input field={@form[:publish_at]} type="datetime-local" label="Publish At" /> <:actions> <.button phx-disable-with="Saving...">Save Link