diff --git a/lib/decentralised_book_index/metadata.ex b/lib/decentralised_book_index/metadata.ex index 825f59a..c5895f0 100644 --- a/lib/decentralised_book_index/metadata.ex +++ b/lib/decentralised_book_index/metadata.ex @@ -62,7 +62,13 @@ defmodule DecentralisedBookIndex.Metadata do define :destroy_author, action: :destroy end - resource DecentralisedBookIndex.Metadata.DBIServer + resource DecentralisedBookIndex.Metadata.DBIServer do + define :create_dbi_server, action: :create + define :list_dbi_server, action: :read + define :get_dbi_server_by_id, args: [:id], action: :by_id + define :update_dbi_server, action: :update + define :destroy_dbi_server, action: :destroy + end resource DecentralisedBookIndex.Metadata.AuthorAliasRegistry do define :create_author_alias_registry, action: :create diff --git a/lib/decentralised_book_index/metadata/dbi_server.ex b/lib/decentralised_book_index/metadata/dbi_server.ex index 652c240..b7ec07b 100644 --- a/lib/decentralised_book_index/metadata/dbi_server.ex +++ b/lib/decentralised_book_index/metadata/dbi_server.ex @@ -23,6 +23,12 @@ defmodule DecentralisedBookIndex.Metadata.DBIServer do primary? true accept [:name, :url] end + + read :by_id do + argument :id, :uuid, allow_nil?: false + get? true + filter expr(id == ^arg(:id)) + end end attributes do diff --git a/lib/decentralised_book_index/sync/sync_tasks/sync_server_task.ex b/lib/decentralised_book_index/sync/sync_tasks/sync_server_task.ex new file mode 100644 index 0000000..eafcf44 --- /dev/null +++ b/lib/decentralised_book_index/sync/sync_tasks/sync_server_task.ex @@ -0,0 +1,23 @@ +defmodule DecentralisedBookIndex.Sync.SyncServerTask do + alias DecentralisedBookIndex.Metadata + alias DecentralisedBookIndex.Metadata.DBIServer + + alias DecentralisedBookIndex.SyncTasks.SyncAuthorsTask + + def sync_all() do + {:ok, servers} = Metadata.list_dbi_server() + + for server <- servers do + sync_one(server) + end + + :ok + end + + def sync_one(%DBIServer{} = server) do + server + |> SyncAuthorsTask.sync() + + :ok + end +end diff --git a/test/decentralised_book_index/sync/sync_tasks/sync_server_task_test.exs b/test/decentralised_book_index/sync/sync_tasks/sync_server_task_test.exs new file mode 100644 index 0000000..9fcaf45 --- /dev/null +++ b/test/decentralised_book_index/sync/sync_tasks/sync_server_task_test.exs @@ -0,0 +1,31 @@ +defmodule DecentralisedBookIndex.Sync.SyncServerTaskTest do + use DecentralisedBookIndex.DataCase + + alias DecentralisedBookIndex.Sync.SyncServerTask + + alias DecentralisedBookIndex.Sync.ApiClients.FetchJson + alias DecentralisedBookIndex.Sync.AuthorSync + + alias DecentralisedBookIndex.Metadata + + alias DecentralisedBookIndex.TestEndpoints + @test_server_endpoint TestEndpoints.test_api_endpoint() + + describe "sync all" do + test "servers" do + server = generate(dbi_server(url: @test_server_endpoint)) + {:ok, author} = Metadata.create_author("Author", "An description") + + assert server = SyncServerTask.sync_all() + end + end + + describe "sync one" do + test "server" do + server = generate(dbi_server(url: @test_server_endpoint)) + {:ok, author} = Metadata.create_author("Author", "An description") + + assert server = SyncServerTask.sync_one(server) + end + end +end