prop/lib/microwaveprop/terrain/terrain_profile.ex
Graham McIntire da75977a55
Rename qsos table to contacts, qso_id to contact_id
- Migration renames table, column, all indexes, and FK constraints
- Contact schema now references "contacts" table
- TerrainProfile foreign key renamed from qso_id to contact_id
- All code and tests updated to use contact_id
2026-04-02 15:52:19 -05:00

34 lines
1 KiB
Elixir

defmodule Microwaveprop.Terrain.TerrainProfile do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "terrain_profiles" do
belongs_to :contact, Microwaveprop.Radio.Contact, foreign_key: :contact_id
field :sample_count, :integer
field :path_points, {:array, :map}
field :max_elevation_m, :float
field :min_clearance_m, :float
field :diffraction_db, :float
field :fresnel_hit_count, :integer
field :obstructed_count, :integer
field :verdict, :string
timestamps(type: :utc_datetime)
end
@required_fields ~w(contact_id sample_count path_points verdict)a
@optional_fields ~w(max_elevation_m min_clearance_m diffraction_db fresnel_hit_count obstructed_count)a
def changeset(profile, attrs) do
profile
|> cast(attrs, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
|> foreign_key_constraint(:contact_id)
|> unique_constraint([:contact_id])
end
end