24 lines
607 B
Elixir
24 lines
607 B
Elixir
|
defmodule Faces.Gallery.Importer do
|
||
|
alias Faces.Gallery.{Person, GithubUserData}
|
||
|
alias Faces.Repo
|
||
|
|
||
|
def import(username) do
|
||
|
with {:ok, user_data} <- GithubUserData.get(username),
|
||
|
{:ok, changeset} <- generate_changeset(user_data),
|
||
|
{:ok, person} <- upsert(changeset) do
|
||
|
{:ok, person}
|
||
|
else
|
||
|
{:error, reason} -> {:error, reason}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp generate_changeset(user_data) do
|
||
|
{:ok, Person.changeset(%Person{}, user_data)}
|
||
|
end
|
||
|
|
||
|
defp upsert(changeset) do
|
||
|
changeset
|
||
|
|> Repo.insert(on_conflict: :replace_all, conflict_target: [:username])
|
||
|
end
|
||
|
end
|