caclawphony/elixir/lib/symphony_elixir/tracker.ex
Alex Kotliarskyi fa75ec68c2 🎼
2026-03-04 09:29:11 -08:00

47 lines
1.6 KiB
Elixir

defmodule SymphonyElixir.Tracker do
@moduledoc """
Adapter boundary for issue tracker reads and writes.
"""
alias SymphonyElixir.Config
@callback fetch_candidate_issues() :: {:ok, [term()]} | {:error, term()}
@callback fetch_issues_by_states([String.t()]) :: {:ok, [term()]} | {:error, term()}
@callback fetch_issue_states_by_ids([String.t()]) :: {:ok, [term()]} | {:error, term()}
@callback create_comment(String.t(), String.t()) :: :ok | {:error, term()}
@callback update_issue_state(String.t(), String.t()) :: :ok | {:error, term()}
@spec fetch_candidate_issues() :: {:ok, [term()]} | {:error, term()}
def fetch_candidate_issues do
adapter().fetch_candidate_issues()
end
@spec fetch_issues_by_states([String.t()]) :: {:ok, [term()]} | {:error, term()}
def fetch_issues_by_states(states) do
adapter().fetch_issues_by_states(states)
end
@spec fetch_issue_states_by_ids([String.t()]) :: {:ok, [term()]} | {:error, term()}
def fetch_issue_states_by_ids(issue_ids) do
adapter().fetch_issue_states_by_ids(issue_ids)
end
@spec create_comment(String.t(), String.t()) :: :ok | {:error, term()}
def create_comment(issue_id, body) do
adapter().create_comment(issue_id, body)
end
@spec update_issue_state(String.t(), String.t()) :: :ok | {:error, term()}
def update_issue_state(issue_id, state_name) do
adapter().update_issue_state(issue_id, state_name)
end
@spec adapter() :: module()
def adapter do
case Config.tracker_kind() do
"memory" -> SymphonyElixir.Tracker.Memory
_ -> SymphonyElixir.Linear.Adapter
end
end
end