Skip to content

Commit

Permalink
Merge pull request #568 from podlove/feature/add-episode-slug
Browse files Browse the repository at this point in the history
feature: adding slug field to episodes
  • Loading branch information
electronicbites authored Oct 1, 2024
2 parents 94e02c8 + 91e2e2c commit 4b0ed24
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 1 deletion.
21 changes: 20 additions & 1 deletion lib/radiator/podcast/episode.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ defmodule Radiator.Podcast.Episode do
import Ecto.Changeset

alias Radiator.Podcast.Show
@slug_max_length 500

schema "episodes" do
field :title, :string
field :number, :integer
field :publish_date, :date
field :slug, :string

belongs_to :show, Show

Expand All @@ -21,7 +23,24 @@ defmodule Radiator.Podcast.Episode do
@doc false
def changeset(episode, attrs) do
episode
|> cast(attrs, [:title, :show_id, :number, :publish_date])
|> cast(attrs, [:title, :show_id, :number, :publish_date, :slug])
|> validate_required([:title, :show_id, :number])
|> validate_length(:title, min: 3)
|> maybe_update_slug()
end

defp maybe_update_slug(changeset) do
# Check if the title has changed
case get_change(changeset, :title) do
nil ->
# No title change, keep slug as is
changeset

new_title ->
new_slug = Slug.slugify(new_title, truncate: @slug_max_length)

changeset
|> put_change(:slug, new_slug)
end
end
end
2 changes: 2 additions & 0 deletions lib/radiator_web/live/episode_live/index.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
<img src={"/images/pic1#{i}.jpg"} alt="" width="100" />
<%= episode.number %>
<%= episode.title %>
<br />
<%= episode.slug %>
</.link>
</li>
</ol>
Expand Down
9 changes: 9 additions & 0 deletions priv/repo/migrations/20240916151804_add_slug_to_episodes.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule Radiator.Repo.Migrations.AddSlugToEpisodes do
use Ecto.Migration

def change do
alter table(:episodes) do
add :slug, :string
end
end
end
2 changes: 2 additions & 0 deletions test/radiator/podcast_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ defmodule Radiator.PodcastTest do
assert episode.title == "some title"
assert episode.show_id == show.id
assert episode.number == 5
assert episode.slug == "some-title"
end

test "create_episode/1 with invalid data returns error changeset" do
Expand All @@ -160,6 +161,7 @@ defmodule Radiator.PodcastTest do
assert {:ok, %Episode{} = episode} = Podcast.update_episode(episode, update_attrs)
assert episode.title == "some updated title"
assert episode.show_id == updated_podcast.id
assert episode.slug == "some-updated-title"
end

test "update_episode/2 with invalid data returns error changeset" do
Expand Down

0 comments on commit 4b0ed24

Please sign in to comment.