-
Notifications
You must be signed in to change notification settings - Fork 85
Closed
Labels
Milestone
Description
Problem
We should do something like the following for sync from GitHub API endpoints in GitHub.Sync:
def issue_api(%GithubRepo{} = github_repo, %{"pull_request" => %{"url" => pull_request_url}} = payload) do
# Pull Request
Multi.new
|> Multi.merge(__MODULE__, :return_repo, [github_repo])
|> Multi.merge(__MODULE__, :fetch_pull_request, [pull_request_url])
|> Multi.merge(GitHub.Sync.PullRequest, :sync, [payload])
|> Multi.merge(GitHub.Sync.Issue, :sync, [payload])
|> Multi.merge(GitHub.Sync.Comment, :sync, [payload])
|> transact()
end
def issue_api(%GithubRepo{} = github_repo, %{} = issue) do
# Issue
Multi.new
|> Multi.merge(__MODULE__, :return_repo, [github_repo])
|> Multi.merge(GitHub.Sync.Issue, :sync, [issue])
|> transact()
end
def comment_api(%GithubRepo{} = github_repo, %{"issue_url" => issue_url} = payload) do
Multi.new
|> Multi.merge(__MODULE__, :return_repo, [github_repo])
|> Multi.merge(__MODULE__, :fetch_issue, [issue_url])
|> Multi.merge(__MODULE__, :maybe_fetch_pull_request, [payload])
|> Multi.merge(GitHub.Sync.PullRequest, :sync, [payload])
|> Multi.merge(GitHub.Sync.Issue, :sync, [payload])
|> Multi.merge(GitHub.Sync.Comment, :sync, [payload])
|> transact()
end
def pull_request_api(%GithubRepo{} = github_repo, %{"issue_url" => issue_url} = payload) do
Multi.new
|> Multi.merge(__MODULE__, :return_repo, [github_repo])
|> Multi.merge(__MODULE__, :fetch_issue, [issue_url])
|> Multi.merge(GitHub.Sync.PullRequest, :sync, [payload])
|> Multi.merge(GitHub.Sync.Issue, :sync, [payload])
|> transact()
end
def return_repo(_, %GithubRepo{} = github_repo) do
Multi.new
|> Multi.run(:repo, fn _ -> github_repo end)
end
def maybe_fetch_pull_request(%{fetch_issue: %{"pull_request" => %{"url" => url}}} = changes, _) do
fetch_pull_request(changes, url)
end
def maybe_fetch_pull_request(_, _), do: Multi.new
def maybe_sync_pull_request(changes, %{} = payload) do
Multi.new
|> Multi.run(:sync_pull_request, fn _ -> GitHub.Sync.PullRequest.sync(changes, payload) end)
end
def maybe_sync_pull_request(_, _), do: Multi.new