31 lines
969 B
Elixir
31 lines
969 B
Elixir
defmodule DediboxPricesWeb.CrawlerController do
|
|
use DediboxPricesWeb, :controller
|
|
require Logger
|
|
|
|
alias DediboxPrices.OffersCrawler
|
|
alias DediboxPrices.Entities.Offers
|
|
alias DediboxPrices.Entities.Offer
|
|
|
|
def refresh(conn, _params) do
|
|
with {_, {:ok, output}} <- {:api, OffersCrawler.get_fresh_data()},
|
|
# maybe it will fail because of entities = [{ :ok, entity }, ...] ?
|
|
{_, entities} <- { :insert, Offers.create_all_entities(output) } do
|
|
conn
|
|
|> put_status(:created)
|
|
|> render("offers.json", output: Enum.map(entities, &Offer.as_json/1))
|
|
else
|
|
{:api, error} ->
|
|
Logger.error(["[refresh] Reaching api or parsing", inspect(error)])
|
|
conn
|
|
|> put_status(500)
|
|
|> json(%{message: "Can't join api"})
|
|
|
|
{:insert, error} ->
|
|
Logger.error(["[refresh] Inserting ", inspect(error)])
|
|
conn
|
|
|> put_status(500)
|
|
|> json(%{message: "Error saving results"})
|
|
end
|
|
end
|
|
end
|