From 343f33e1f95900204ee47ef13d2f3d991e618211 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Thu, 8 Oct 2026 23:11:32 +0900 Subject: [PATCH] #425 --- backend/db/schema.rb | 90 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/backend/db/schema.rb b/backend/db/schema.rb index 611cced..dda45de 100644 --- a/backend/db/schema.rb +++ b/backend/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_10_05_000000) do +ActiveRecord::Schema[8.0].define(version: 2026_10_08_010000) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -483,6 +483,80 @@ ActiveRecord::Schema[8.0].define(version: 2026_10_05_000000) do t.check_constraint "`version_no` > 0", name: "chk_tag_descriptions_version_no_positive" end + create_table "tag_group_groups", primary_key: ["tag_group_id", "child_tag_group_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.bigint "tag_group_id", null: false + t.bigint "child_tag_group_id", null: false + t.bigint "created_by_user_id" + t.datetime "created_at", null: false + t.index ["child_tag_group_id"], name: "index_tag_group_groups_on_child_tag_group_id" + t.index ["created_by_user_id"], name: "index_tag_group_groups_on_created_by_user_id" + t.check_constraint "`tag_group_id` <> `child_tag_group_id`", name: "chk_tag_group_groups_tag_group_id_not_child_tag_group_id" + end + + create_table "tag_group_placements", primary_key: ["tag_group_id", "position"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.bigint "tag_group_id", null: false + t.integer "position", null: false + t.integer "parent_position" + t.string "section_name" + t.text "description" + t.bigint "tag_id" + t.bigint "child_tag_group_id" + t.bigint "created_by_user_id" + t.bigint "updated_by_user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["child_tag_group_id"], name: "index_tag_group_placements_on_child_tag_group_id" + t.index ["created_by_user_id"], name: "index_tag_group_placements_on_created_by_user_id" + t.index ["tag_group_id", "child_tag_group_id"], name: "fk_rails_7342b54ced" + t.index ["tag_group_id", "parent_position"], name: "fk_rails_3af6ee71ca" + t.index ["tag_group_id", "tag_id"], name: "fk_rails_365dc60759" + t.index ["tag_id"], name: "index_tag_group_placements_on_tag_id" + t.index ["updated_by_user_id"], name: "index_tag_group_placements_on_updated_by_user_id" + t.check_constraint "(((`section_name` is not null) and (`tag_id` is null) and (`child_tag_group_id` is null)) or ((`section_name` is null) and (`tag_id` is not null) and (`child_tag_group_id` is null)) or ((`section_name` is null) and (`tag_id` is null) and (`child_tag_group_id` is not null))) and ((`section_name` is not null) or (`description` is null))", name: "chk_tag_group_placements_references_exclusive" + t.check_constraint "`position` > `parent_position`", name: "chk_tag_group_placements_position_gt_parent_position" + end + + create_table "tag_group_tags", primary_key: ["tag_group_id", "tag_id"], charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.bigint "tag_group_id", null: false + t.bigint "tag_id", null: false + t.bigint "created_by_user_id" + t.datetime "created_at", null: false + t.index ["created_by_user_id"], name: "index_tag_group_tags_on_created_by_user_id" + t.index ["tag_id"], name: "index_tag_group_tags_on_tag_id" + end + + create_table "tag_group_versions", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.bigint "tag_group_id", null: false + t.integer "version_no", null: false + t.string "event_type", null: false + t.string "name", null: false + t.text "description" + t.json "members", null: false + t.json "placements", null: false + t.bigint "created_by_user_id" + t.datetime "created_at", null: false + t.index ["created_by_user_id"], name: "index_tag_group_versions_on_created_by_user_id" + t.index ["tag_group_id", "version_no"], name: "index_tag_group_versions_on_tag_group_id_and_version_no", unique: true + t.index ["tag_group_id"], name: "index_tag_group_versions_on_tag_group_id" + t.check_constraint "`version_no` > 0", name: "chk_tag_group_versions_version_no_positive" + t.check_constraint "json_schema_valid(_utf8mb4'{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"children\"],\"properties\":{\"section_name\":{\"type\":\"string\"},\"description\":{\"type\":[\"string\",\"null\"]},\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"children\"],\"properties\":{\"section_name\":{\"type\":\"string\"},\"description\":{\"type\":[\"string\",\"null\"]},\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"children\"],\"properties\":{\"section_name\":{\"type\":\"string\"},\"description\":{\"type\":[\"string\",\"null\"]},\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"children\"],\"properties\":{\"section_name\":{\"type\":\"string\"},\"description\":{\"type\":[\"string\",\"null\"]},\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"children\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"children\"],\"properties\":{\"section_name\":{\"type\":\"string\"},\"description\":{\"type\":[\"string\",\"null\"]},\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"children\":{\"type\":\"array\",\"maxItems\":0}},\"oneOf\":[{\"required\":[\"section_name\"]},{\"required\":[\"tag_id\"]},{\"required\":[\"tag_group_id\"]}],\"dependencies\":{\"description\":[\"section_name\"]},\"additionalProperties\":false}}},\"oneOf\":[{\"required\":[\"section_name\"]},{\"required\":[\"tag_id\"]},{\"required\":[\"tag_group_id\"]}],\"dependencies\":{\"description\":[\"section_name\"]},\"additionalProperties\":false}}},\"oneOf\":[{\"required\":[\"section_name\"]},{\"required\":[\"tag_id\"]},{\"required\":[\"tag_group_id\"]}],\"dependencies\":{\"description\":[\"section_name\"]},\"additionalProperties\":false}}},\"oneOf\":[{\"required\":[\"section_name\"]},{\"required\":[\"tag_id\"]},{\"required\":[\"tag_group_id\"]}],\"dependencies\":{\"description\":[\"section_name\"]},\"additionalProperties\":false}}},\"oneOf\":[{\"required\":[\"section_name\"]},{\"required\":[\"tag_id\"]},{\"required\":[\"tag_group_id\"]}],\"dependencies\":{\"description\":[\"section_name\"]},\"additionalProperties\":false}}',`placements`)", name: "chk_tag_group_versions_placements_schema" + t.check_constraint "json_schema_valid(_utf8mb4'{\"type\":\"array\",\"uniqueItems\":true,\"items\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"tag_id\",\"version_no\"],\"properties\":{\"tag_id\":{\"type\":\"integer\",\"minimum\":1},\"version_no\":{\"type\":\"integer\",\"minimum\":1}},\"additionalProperties\":false},{\"type\":\"object\",\"required\":[\"tag_group_id\",\"version_no\"],\"properties\":{\"tag_group_id\":{\"type\":\"integer\",\"minimum\":1},\"version_no\":{\"type\":\"integer\",\"minimum\":1}},\"additionalProperties\":false}]}}',`members`)", name: "chk_tag_group_versions_members_schema" + end + + create_table "tag_groups", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "version_no", null: false + t.string "name", null: false + t.text "description" + t.bigint "created_by_user_id" + t.bigint "updated_by_user_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["created_by_user_id"], name: "index_tag_groups_on_created_by_user_id" + t.index ["name"], name: "index_tag_groups_on_name", unique: true + t.index ["updated_by_user_id"], name: "index_tag_groups_on_updated_by_user_id" + t.check_constraint "`version_no` > 0", name: "chk_tag_groups_version_no_positive" + end + create_table "tag_implications", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "tag_id", null: false t.bigint "parent_tag_id", null: false @@ -823,6 +897,20 @@ ActiveRecord::Schema[8.0].define(version: 2026_10_05_000000) do add_foreign_key "tag_descriptions", "tags" add_foreign_key "tag_descriptions", "users", column: "created_by_user_id" add_foreign_key "tag_descriptions", "users", column: "updated_by_user_id" + add_foreign_key "tag_group_groups", "tag_groups" + add_foreign_key "tag_group_groups", "tag_groups", column: "child_tag_group_id" + add_foreign_key "tag_group_groups", "users", column: "created_by_user_id" + add_foreign_key "tag_group_placements", "tag_group_groups", column: ["tag_group_id", "child_tag_group_id"], primary_key: ["tag_group_id", "child_tag_group_id"] + add_foreign_key "tag_group_placements", "tag_group_placements", column: ["tag_group_id", "parent_position"], primary_key: ["tag_group_id", "position"] + add_foreign_key "tag_group_placements", "tag_group_tags", column: ["tag_group_id", "tag_id"], primary_key: ["tag_group_id", "tag_id"] + add_foreign_key "tag_group_placements", "tag_groups" + add_foreign_key "tag_group_placements", "users", column: "created_by_user_id" + add_foreign_key "tag_group_placements", "users", column: "updated_by_user_id" + add_foreign_key "tag_group_tags", "tag_groups" + add_foreign_key "tag_group_tags", "tags" + add_foreign_key "tag_group_tags", "users", column: "created_by_user_id" + add_foreign_key "tag_groups", "users", column: "created_by_user_id" + add_foreign_key "tag_groups", "users", column: "updated_by_user_id" add_foreign_key "tag_implications", "tags" add_foreign_key "tag_implications", "tags", column: "parent_tag_id" add_foreign_key "tag_names", "languages", column: "language_code", primary_key: "code"