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