From 48691e669e6e6666c71729c1f584cbf32fe683f9 Mon Sep 17 00:00:00 2001 From: shibao Date: Sun, 12 Sep 2021 19:27:18 -0400 Subject: [PATCH] add container tags --- lib/cannery/containers/container_tag.ex | 31 +++++++++++++++++++ .../20210912224533_create_container_tags.exs | 17 ++++++++++ 2 files changed, 48 insertions(+) create mode 100644 lib/cannery/containers/container_tag.ex create mode 100644 priv/repo/migrations/20210912224533_create_container_tags.exs diff --git a/lib/cannery/containers/container_tag.ex b/lib/cannery/containers/container_tag.ex new file mode 100644 index 0000000..b88b506 --- /dev/null +++ b/lib/cannery/containers/container_tag.ex @@ -0,0 +1,31 @@ +defmodule Cannery.Containers.ContainerTag do + use Ecto.Schema + import Ecto.Changeset + alias Cannery.{Containers, Tags} + + @primary_key {:id, :binary_id, autogenerate: true} + @foreign_key_type :binary_id + schema "container_tags" do + belongs_to :container, Containers.Container + belongs_to :tag, Tags.Tag + + timestamps() + end + + @type t :: %{ + id: Ecto.UUID.t(), + container: Containers.Container.t(), + container_id: Ecto.UUID.t(), + tag: Tags.Tag.t(), + tag_id: Ecto.UUID.t(), + inserted_at: NaiveDateTime.t(), + updated_at: NaiveDateTime.t() + } + + @doc false + def changeset(container_tag, attrs) do + container_tag + |> cast(attrs, [:tag_id, :container_id]) + |> validate_required([:tag_id, :container_id]) + end +end diff --git a/priv/repo/migrations/20210912224533_create_container_tags.exs b/priv/repo/migrations/20210912224533_create_container_tags.exs new file mode 100644 index 0000000..ec69210 --- /dev/null +++ b/priv/repo/migrations/20210912224533_create_container_tags.exs @@ -0,0 +1,17 @@ +defmodule Cannery.Repo.Migrations.CreateContainerTags do + use Ecto.Migration + + def change do + create table(:container_tags, primary_key: false) do + add :id, :binary_id, primary_key: true + + add :container_id, references(:containers, on_delete: :delete_all, type: :binary_id) + add :tag_id, references(:tags, on_delete: :delete_all, type: :binary_id) + + timestamps() + end + + create index(:container_tags, [:container_id]) + create index(:container_tags, [:tag_id]) + end +end