Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions server/lib/orcasite/radio/feed.ex
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ defmodule Orcasite.Radio.Feed do
:cloudfront_url,
:dataplicity_id,
:orcahello_id,
:maintainer_emails,
:location_point,
if(Orcasite.Config.seeding_enabled?(), do: :id)
]
Expand All @@ -241,6 +242,7 @@ defmodule Orcasite.Radio.Feed do
:cloudfront_url,
:dataplicity_id,
:orcahello_id,
:maintainer_emails,
:location_point
]

Expand Down
89 changes: 50 additions & 39 deletions server/lib/orcasite/radio/seed.ex
Original file line number Diff line number Diff line change
Expand Up @@ -61,26 +61,24 @@ defmodule Orcasite.Radio.Seed do
default: fn -> DateTime.utc_now() |> DateTime.add(-2, :minute) end

run fn %{arguments: %{start_time: start_time, end_time: end_time}}, _ ->
__MODULE__.feeds()

feeds = Orcasite.Radio.Feed |> Ash.read!()

seed_params =
for feed <- feeds, resource <- [:feed_segment, :detection, :audio_image, :bout] do
{feed, resource}
end

seed_params
|> Stream.map(fn {feed, resource} ->
__MODULE__.resource!(%{
resource: resource,
start_time: start_time,
end_time: end_time,
feed_id: feed.id
})
end)
|> Enum.to_list()
|> then(&{:ok, &1})
with {:ok, feeds} <- seed_and_load_feeds() do
seed_params =
for feed <- feeds, resource <- [:feed_segment, :detection, :audio_image, :bout] do
{feed, resource}
end

seed_params
|> Stream.map(fn {feed, resource} ->
__MODULE__.resource!(%{
resource: resource,
start_time: start_time,
end_time: end_time,
feed_id: feed.id
})
end)
|> Enum.to_list()
|> then(&{:ok, &1})
end
end
end

Expand All @@ -90,25 +88,23 @@ defmodule Orcasite.Radio.Seed do
argument :limit, :integer, allow_nil?: false, default: 100

run fn %{arguments: %{limit: limit}}, _ ->
__MODULE__.feeds()

feeds = Orcasite.Radio.Feed |> Ash.read!()

seed_params =
for feed <- feeds, resource <- [:detection, :audio_image, :bout] do
{feed, resource}
end

seed_params
|> Stream.map(fn {feed, resource} ->
__MODULE__.latest_resource!(%{
resource: resource,
limit: limit,
feed_id: feed.id
})
end)
|> Enum.to_list()
|> then(&{:ok, &1})
with {:ok, feeds} <- seed_and_load_feeds() do
seed_params =
for feed <- feeds, resource <- [:detection, :audio_image, :bout] do
{feed, resource}
end

seed_params
|> Stream.map(fn {feed, resource} ->
__MODULE__.latest_resource!(%{
resource: resource,
limit: limit,
feed_id: feed.id
})
end)
|> Enum.to_list()
|> then(&{:ok, &1})
end
end
end

Expand Down Expand Up @@ -243,4 +239,19 @@ defmodule Orcasite.Radio.Seed do
:feed_stream -> Orcasite.Radio.FeedStream
end
end

defp seed_and_load_feeds do
with {:ok, _} <- __MODULE__.feeds(),
{:ok, feeds} <- Ash.read(Orcasite.Radio.Feed, authorize?: false) do
case feeds do
[] ->
{:error,
message:
"No feeds were seeded. Run `seedFeeds` first and inspect server logs for feed seeding errors."}

_ ->
{:ok, feeds}
end
end
end
end
12 changes: 11 additions & 1 deletion server/lib/orcasite/radio/seed/utils.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ defmodule Orcasite.Radio.Seed.Utils do
attr = Absinthe.Adapter.Underscore.to_internal_name(key, [])

cond do
writable_attr?(resource, attr) ->
writable_attr?(resource, attr) and include_attribute_input?(resource, attr, val) ->
[{attr, val}]

many_relationship?(resource, attr) ->
Expand All @@ -30,6 +30,16 @@ defmodule Orcasite.Radio.Seed.Utils do
|> Map.new()
end

def include_attribute_input?(resource, key, value) do
case Ash.Resource.Info.attribute(resource, key) do
%{allow_nil?: false} when is_nil(value) ->
false

_ ->
true
end
end

def writable_attr?(resource, key) do
Ash.Resource.Info.attribute(resource, key)
|> case do
Expand Down
4 changes: 2 additions & 2 deletions server/priv/repo/seeds.exs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
require Ash.Query

Orcasite.Radio.Seed.time_range(%{
Orcasite.Radio.Seed.time_range!(%{
end_time: DateTime.utc_now(),
start_time: DateTime.add(DateTime.utc_now(), -1, :hour)
})

Orcasite.Radio.Seed.latest()
Orcasite.Radio.Seed.latest!()

# Create admin account
strategy = AshAuthentication.Info.strategy!(Orcasite.Accounts.User, :password)
Expand Down
3 changes: 2 additions & 1 deletion ui/.eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
"unusedExports": true,
"ignoreExports": [
"src/pages", // pages are automatically imported by nextjs
"codegen.ts"
"codegen.ts",
"vitest.config.ts"
]
}
]
Expand Down
Loading
Loading