This repository has been archived on 2022-08-13. You can view files and clone it, but cannot push or open issues or pull requests.
dedibox_prices/lib/dedibox_prices_web/controllers/crawler_controller.ex

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