forsaken1/uphill-rating

View on GitHub
web/models/bicyclist_race.ex

Summary

Maintainability
Test Coverage
defmodule UphillRating.BicyclistRace do
  use UphillRating.Web, :model

  schema "bicyclist_races" do
    field :time, Ecto.Time
    field :lag, Ecto.Time
    field :points, :float
    field :place, :integer
    field :result_points, :float
    belongs_to :bicyclist, UphillRating.Bicyclist
    belongs_to :race, UphillRating.Race
    belongs_to :team, UphillRating.Team

    timestamps
  end

  @required_fields ~w(time bicyclist_id race_id team_id)
  @optional_fields ~w(place lag points result_points)

  @doc """
  Creates a changeset based on the `model` and `params`.

  If no params are provided, an invalid changeset is returned
  with no validation performed.
  """
  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end

  def order_by_time(query) do
    from p in query,
    order_by: [asc: p.time]
  end

  def order_by_points(query) do
    from p in query,
    order_by: [desc: p.points]
  end

  def for_race(query, race) do
    from c in query,
     join: p in assoc(c, :race),
    where: p.id == ^race.id
  end
end