defmodule Bbox.Candidates do
@moduledoc """
Candidates module.
"""
alias Bbox.Repo
alias Bbox.Candidates.Candidate
alias Bbox.Parties.Party
@doc """
Create a new candidate.
"""
@spec insert(%Party{}, map()) :: {:ok, %Candidate{}} | {:error, charlist()}
def insert(party, params \\ %{}) do
candidate = Ecto.build_assoc(party, :candidates, params)
candidate = Candidate.changeset(candidate, params)
{:ok, candidate} = Repo.insert(candidate)
:telemetry.execute([:bbox, :candidates, :insert], %{candidate: candidate})
{:ok, candidate}
end
@doc """
List all candidates.
"""
@spec list!() :: [%Candidate{}]
def list!() do
candidates =
Candidate
|> Repo.all()
:telemetry.execute([:bbox, :candidates, :list!], %{candidates: candidates})
candidates
end
@doc """
Get candidate by code.
"""
@spec get_by_code!(charlist()) :: %Candidate{}
def get_by_code!(code) do
Candidate
|> Repo.get_by!(code: code)
end
end