lib/membership/member_roles.ex

defmodule Membership.MemberRoles do
  @moduledoc """
  MemberFeatures is the association linking the member to the feature you can also set specific features for the membership
  """

  use Membership.Schema, type: :binary_fk

  alias Membership.Member
  alias Membership.Role
  alias Membership.MemberRoles

  schema "membership_member_roles" do
    belongs_to(:member, Member)
    belongs_to(:role, Role)
  end

  def changeset(%MemberRoles{} = struct, params \\ %{}) do
    struct
    |> cast(params, [:member_id, :role_id])
    |> validate_required([:member_id, :role_id])
  end

  def create(
        %Member{id: id},
        %{__struct__: _role_name, id: role_id}
      ) do
    changeset(%MemberRoles{
      member_id: id,
      role_id: role_id
    })
    |> Repo.insert!()
  end

  def table, do: :membership_features
end