lib/pinbacker.ex

defmodule Pinbacker do
  @moduledoc """
  Documentation for `Pinbacker`.
  """

  alias Pinbacker.{PathParser, Downloader, Metadata}
  require Logger

  def fetch(url, parent) do
    case PathParser.parse(url) do
      {:ok, :pin, pin_id} ->
        Downloader.save_single_pin(pin_id, parent)

      {:ok, :section, section_path} ->
        Downloader.save_section(section_path, parent)

      {:ok, :board, board_path} ->
        Downloader.save_board(board_path, parent)

      {:ok, :username, username} ->
        boards = Metadata.get_links(:username, [username])

        Logger.info("Found #{length(boards)} boards for #{username}..")

        for board <- boards do
          Downloader.save_board([username, Map.get(board, "slug")], parent)
        end

      {:error, error} ->
        Logger.error("Error: #{error}")
    end

    Logger.info("Done")

    true
  end
end