Skip to content

Commit 310f5a1

Browse files
new event that gets emitted when urls have been detected
1 parent db041c8 commit 310f5a1

File tree

6 files changed

+36
-8
lines changed

6 files changed

+36
-8
lines changed

lib/radiator/event_store.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ defmodule Radiator.EventStore do
1313
data: Event.payload(event),
1414
event_type: Event.event_type(event),
1515
uuid: convert_to_uuid(event.event_id),
16-
user_id: event.user_id
16+
user_id: Event.user_id(event)
1717
})
1818

1919
event

lib/radiator/event_store/event_data.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ defmodule Radiator.EventStore.EventData do
2020
def changeset(event, attrs) do
2121
event
2222
|> cast(attrs, [:uuid, :event_type, :data, :user_id])
23-
|> validate_required([:uuid, :event_type, :user_id])
23+
|> validate_required([:uuid, :event_type])
2424
end
2525
end

lib/radiator/outline/event.ex

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ defmodule Radiator.Outline.Event do
77
NodeContentChangedEvent,
88
NodeDeletedEvent,
99
NodeInsertedEvent,
10-
NodeMovedEvent
10+
NodeMovedEvent,
11+
UrlsAnalyzedEvent
1112
}
1213

1314
def payload(%NodeInsertedEvent{} = event) do
@@ -40,10 +41,21 @@ defmodule Radiator.Outline.Event do
4041
}
4142
end
4243

44+
def payload(%UrlsAnalyzedEvent{} = event) do
45+
%{
46+
node_id: event.node_id,
47+
urls: event.urls
48+
}
49+
end
50+
51+
def user_id(%UrlsAnalyzedEvent{}), do: nil
52+
def user_id(event), do: event.user_id
53+
4354
def event_type(%NodeInsertedEvent{} = _event), do: "NodeInsertedEvent"
4455
def event_type(%NodeContentChangedEvent{} = _event), do: "NodeContentChangedEvent"
4556
def event_type(%NodeDeletedEvent{} = _event), do: "NodeDeletedEvent"
4657
def event_type(%NodeMovedEvent{} = _event), do: "NodeMovedEvent"
58+
def event_type(%UrlsAnalyzedEvent{} = _event), do: "UrlsAnalyzedEvent"
4759

4860
def episode_id(%{episode_id: episode_id}), do: episode_id
4961
end
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
defmodule Radiator.Outline.Event.UrlsAnalyzedEvent do
2+
@moduledoc false
3+
defstruct [:node_id, :urls, :episode_id, event_id: Ecto.UUID.generate()]
4+
end

lib/radiator/resources/node_changed_worker.ex

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ defmodule Radiator.Resources.NodeChangedWorker do
33
job to extract urls from content and persist URLs
44
"""
55
alias __MODULE__
6+
alias Radiator.EventStore
67
alias Radiator.NodeAnalyzer
8+
alias Radiator.Outline.Dispatch
9+
alias Radiator.Outline.Event.UrlsAnalyzedEvent
710
alias Radiator.Outline.NodeRepository
811
alias Radiator.Resources
912

@@ -16,13 +19,20 @@ defmodule Radiator.Resources.NodeChangedWorker do
1619

1720
def perform(node_id) do
1821
analyzers = [Radiator.NodeAnalyzer.UrlAnalyzer]
22+
node = NodeRepository.get_node!(node_id)
23+
url_attributes = NodeAnalyzer.do_analyze(node, analyzers)
24+
url_resources = Resources.rebuild_node_urls(node_id, url_attributes)
1925

20-
url_attributes =
21-
node_id
22-
|> NodeRepository.get_node!()
23-
|> NodeAnalyzer.do_analyze(analyzers)
26+
if url_resources != [] do
27+
%UrlsAnalyzedEvent{
28+
node_id: node_id,
29+
urls: url_resources,
30+
episode_id: node.episode_id
31+
}
32+
|> EventStore.persist_event()
33+
|> Dispatch.broadcast()
34+
end
2435

25-
_created_urls = Resources.rebuild_node_urls(node_id, url_attributes)
2636
:ok
2737
end
2838
end

lib/radiator/resources/url.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ defmodule Radiator.Resources.Url do
55
use Ecto.Schema
66
import Ecto.Changeset
77

8+
@derive {Jason.Encoder, only: [:id, :url, :start_bytes, :size_bytes, :meta_data]}
9+
810
defmodule MetaData do
911
@moduledoc """
1012
Meta data for a URL depending on the analyzers.

0 commit comments

Comments
 (0)