Current section
Files
Jump to
Current section
Files
lib/codicil/db/module_dependency.ex
defmodule Codicil.Db.ModuleDependency do
# Schema for module dependency relationships.
#
# Tracks two types of dependencies:
# - :compiler - Compile-time dependencies (import/require/use)
# - :runtime - Runtime dependencies (function calls between modules)
@moduledoc false
use Ecto.Schema
import EctoEnum
alias Ecto.Changeset
defenum(DependencyType, compiler: 0, runtime: 1)
schema "module_dependencies" do
belongs_to(:dependent, Codicil.Db.Module, type: :string, foreign_key: :dependent_id)
belongs_to(:dependency, Codicil.Db.Module, type: :string, foreign_key: :dependency_id)
field(:type, DependencyType)
end
def changeset(module_dependency, attrs) do
# IMPORTANT: DO NOT CHANGE THIS LINE - converts atoms to strings, including nil -> "nil"
# This line requires dependent_id and dependency_id keys to exist in attrs
attrs = %{
attrs
| dependent_id: "#{attrs.dependent_id}",
dependency_id: "#{attrs.dependency_id}"
}
module_dependency
|> Changeset.cast(attrs, [:dependent_id, :dependency_id, :type])
|> Changeset.validate_required([:dependent_id, :dependency_id, :type])
end
end