# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running `bin/rails
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2022_02_24_194639) do

  create_table "agile_colors", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "container_type"
    t.integer "container_id"
    t.string "color"
    t.index ["container_id"], name: "index_agile_colors_on_container_id"
    t.index ["container_type"], name: "index_agile_colors_on_container_type"
  end

  create_table "agile_data", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "issue_id"
    t.integer "position"
    t.integer "story_points"
    t.integer "agile_sprint_id"
    t.index ["issue_id"], name: "index_agile_data_on_issue_id"
    t.index ["position"], name: "index_agile_data_on_position"
  end

  create_table "agile_sprints", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id"
    t.string "name", null: false
    t.text "description"
    t.integer "status", default: 0, null: false
    t.date "start_date", null: false
    t.date "end_date", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "sharing", default: 0, null: false
  end

  create_table "attachments", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "container_id"
    t.string "container_type", limit: 30
    t.string "filename", default: "", null: false
    t.string "disk_filename", default: "", null: false
    t.bigint "filesize", default: 0, null: false
    t.string "content_type", default: ""
    t.string "digest", limit: 64, default: "", null: false
    t.integer "downloads", default: 0, null: false
    t.integer "author_id", default: 0, null: false
    t.datetime "created_on"
    t.string "description"
    t.string "disk_directory"
    t.index ["author_id"], name: "index_attachments_on_author_id"
    t.index ["container_id", "container_type"], name: "index_attachments_on_container_id_and_container_type"
    t.index ["created_on"], name: "index_attachments_on_created_on"
    t.index ["disk_filename"], name: "index_attachments_on_disk_filename"
  end

  create_table "auth_sources", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "type", limit: 30, default: "", null: false
    t.string "name", limit: 60, default: "", null: false
    t.string "host", limit: 60
    t.integer "port"
    t.string "account"
    t.string "account_password", default: ""
    t.string "base_dn"
    t.string "attr_login", limit: 30
    t.string "attr_firstname", limit: 30
    t.string "attr_lastname", limit: 30
    t.string "attr_mail", limit: 30
    t.boolean "onthefly_register", default: false, null: false
    t.boolean "tls", default: false, null: false
    t.text "filter"
    t.integer "timeout"
    t.boolean "verify_peer", default: true, null: false
    t.index ["id", "type"], name: "index_auth_sources_on_id_and_type"
  end

  create_table "boards", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", null: false
    t.string "name", default: "", null: false
    t.string "description"
    t.integer "position"
    t.integer "topics_count", default: 0, null: false
    t.integer "messages_count", default: 0, null: false
    t.integer "last_message_id"
    t.integer "parent_id"
    t.index ["last_message_id"], name: "index_boards_on_last_message_id"
    t.index ["project_id"], name: "boards_project_id"
  end

  create_table "burndown_days", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "points_committed", default: 0, null: false
    t.integer "points_accepted", default: 0, null: false
    t.integer "points_resolved", default: 0, null: false
    t.float "remaining_hours", default: 0.0, null: false
    t.integer "version_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["version_id"], name: "index_burndown_days_on_version_id"
  end

  create_table "changes", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "changeset_id", null: false
    t.string "action", limit: 1, default: "", null: false
    t.text "path", null: false
    t.text "from_path"
    t.string "from_revision"
    t.string "revision"
    t.string "branch"
    t.index ["changeset_id"], name: "changesets_changeset_id"
  end

  create_table "changeset_parents", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "changeset_id", null: false
    t.integer "parent_id", null: false
    t.index ["changeset_id"], name: "changeset_parents_changeset_ids"
    t.index ["parent_id"], name: "changeset_parents_parent_ids"
  end

  create_table "changesets", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "repository_id", null: false
    t.string "revision", null: false
    t.string "committer"
    t.datetime "committed_on", null: false
    t.text "comments", size: :long
    t.date "commit_date"
    t.string "scmid"
    t.integer "user_id"
    t.index ["committed_on"], name: "index_changesets_on_committed_on"
    t.index ["repository_id", "revision"], name: "changesets_repos_rev", unique: true
    t.index ["repository_id", "scmid"], name: "changesets_repos_scmid"
    t.index ["repository_id"], name: "index_changesets_on_repository_id"
    t.index ["user_id"], name: "index_changesets_on_user_id"
  end

  create_table "changesets_issues", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "changeset_id", null: false
    t.integer "issue_id", null: false
    t.index ["changeset_id", "issue_id"], name: "changesets_issues_ids", unique: true
    t.index ["issue_id"], name: "index_changesets_issues_on_issue_id"
  end

  create_table "comments", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "commented_type", limit: 30, default: "", null: false
    t.integer "commented_id", default: 0, null: false
    t.integer "author_id", default: 0, null: false
    t.text "content"
    t.datetime "created_on", null: false
    t.datetime "updated_on", null: false
    t.index ["author_id"], name: "index_comments_on_author_id"
    t.index ["commented_id", "commented_type"], name: "index_comments_on_commented_id_and_commented_type"
  end

  create_table "custom_field_enumerations", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "custom_field_id", null: false
    t.string "name", null: false
    t.boolean "active", default: true, null: false
    t.integer "position", default: 1, null: false
  end

  create_table "custom_fields", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "type", limit: 30, default: "", null: false
    t.string "name", limit: 30, default: "", null: false
    t.string "field_format", limit: 30, default: "", null: false
    t.text "possible_values"
    t.string "regexp", default: ""
    t.integer "min_length"
    t.integer "max_length"
    t.boolean "is_required", default: false, null: false
    t.boolean "is_for_all", default: false, null: false
    t.boolean "is_filter", default: false, null: false
    t.integer "position"
    t.boolean "searchable", default: false
    t.text "default_value"
    t.boolean "editable", default: true
    t.boolean "visible", default: true, null: false
    t.boolean "multiple", default: false
    t.text "format_store"
    t.text "description"
    t.boolean "dmsf_not_inheritable"
    t.index ["id", "type"], name: "index_custom_fields_on_id_and_type"
  end

  create_table "custom_fields_projects", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "custom_field_id", default: 0, null: false
    t.integer "project_id", default: 0, null: false
    t.index ["custom_field_id", "project_id"], name: "index_custom_fields_projects_on_custom_field_id_and_project_id", unique: true
  end

  create_table "custom_fields_roles", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "custom_field_id", null: false
    t.integer "role_id", null: false
    t.index ["custom_field_id", "role_id"], name: "custom_fields_roles_ids", unique: true
  end

  create_table "custom_fields_trackers", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "custom_field_id", default: 0, null: false
    t.integer "tracker_id", default: 0, null: false
    t.index ["custom_field_id", "tracker_id"], name: "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", unique: true
  end

  create_table "custom_values", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "customized_type", limit: 30, default: "", null: false
    t.integer "customized_id", default: 0, null: false
    t.integer "custom_field_id", default: 0, null: false
    t.text "value", size: :long
    t.index ["custom_field_id"], name: "index_custom_values_on_custom_field_id"
    t.index ["customized_type", "customized_id"], name: "custom_values_customized"
  end

  create_table "dashboard_roles", charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.bigint "dashboard_id", null: false
    t.integer "role_id", null: false
    t.index ["dashboard_id", "role_id"], name: "dashboard_role_ids", unique: true
    t.index ["dashboard_id"], name: "index_dashboard_roles_on_dashboard_id"
    t.index ["role_id"], name: "index_dashboard_roles_on_role_id"
  end

  create_table "dashboards", charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", null: false
    t.text "description"
    t.string "dashboard_type", limit: 30, default: "", null: false
    t.boolean "system_default", default: false, null: false
    t.boolean "always_expose", default: false, null: false
    t.boolean "enable_sidebar", default: false, null: false
    t.integer "project_id"
    t.integer "author_id", null: false
    t.integer "visibility", default: 0, null: false
    t.text "options"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["author_id"], name: "index_dashboards_on_author_id"
    t.index ["name"], name: "index_dashboards_on_name"
    t.index ["project_id"], name: "index_dashboards_on_project_id"
    t.index ["visibility"], name: "index_dashboards_on_visibility"
  end

  create_table "dmsf_file_revision_accesses", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "dmsf_file_revision_id", null: false
    t.integer "action", default: 0, null: false
    t.integer "user_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "dmsf_file_revisions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "dmsf_file_id", null: false
    t.integer "source_dmsf_file_revision_id"
    t.string "name", null: false
    t.string "disk_filename", null: false
    t.bigint "size"
    t.string "mime_type"
    t.string "title", null: false
    t.text "description"
    t.integer "workflow"
    t.integer "major_version", null: false
    t.integer "minor_version", null: false
    t.text "comment"
    t.integer "deleted", default: 0, null: false
    t.integer "deleted_by_user_id"
    t.integer "user_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "dmsf_workflow_id"
    t.integer "dmsf_workflow_assigned_by"
    t.datetime "dmsf_workflow_assigned_at"
    t.integer "dmsf_workflow_started_by"
    t.datetime "dmsf_workflow_started_at"
    t.string "digest", limit: 40, default: "", null: false
    t.index ["dmsf_file_id"], name: "index_dmsf_file_revisions_on_dmsf_file_id"
  end

  create_table "dmsf_files", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "container_id", null: false
    t.integer "dmsf_folder_id"
    t.string "name", null: false
    t.boolean "notification", default: false
    t.integer "deleted", default: 0, null: false
    t.integer "deleted_by_user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "container_type", limit: 30, default: "Project", null: false
    t.index ["container_id", "container_type"], name: "index_dmsf_files_on_container_id_and_container_type"
  end

  create_table "dmsf_folders", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "dmsf_folder_id"
    t.string "title", null: false
    t.text "description"
    t.boolean "notification", default: false
    t.integer "user_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "deleted", default: 0, null: false
    t.integer "deleted_by_user_id"
    t.index ["project_id"], name: "index_dmsf_folders_on_project_id"
  end

  create_table "dmsf_links", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "target_project_id", null: false
    t.integer "target_id"
    t.string "target_type", limit: 10, null: false
    t.string "name", null: false
    t.integer "project_id", null: false
    t.integer "dmsf_folder_id"
    t.integer "deleted", default: 0, null: false
    t.integer "deleted_by_user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "external_url"
    t.integer "user_id"
    t.index ["project_id"], name: "index_dmsf_links_on_project_id"
  end

  create_table "dmsf_locks", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "entity_id", null: false
    t.integer "user_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "entity_type", null: false
    t.integer "lock_type_cd", null: false
    t.integer "lock_scope_cd", null: false
    t.string "uuid", limit: 36
    t.datetime "expires_at"
    t.integer "dmsf_file_last_revision_id"
    t.index ["entity_id"], name: "index_dmsf_locks_on_entity_id"
  end

  create_table "dmsf_public_urls", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "token", limit: 32, null: false
    t.integer "dmsf_file_id", null: false
    t.integer "user_id", null: false
    t.datetime "expire_at", null: false
    t.datetime "created_at"
    t.datetime "updated_at"
    t.index ["token"], name: "index_dmsf_public_urls_on_token"
  end

  create_table "dmsf_workflow_step_actions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "dmsf_workflow_step_assignment_id", null: false
    t.integer "action", null: false
    t.text "note"
    t.datetime "created_at"
    t.integer "author_id", null: false
    t.index ["dmsf_workflow_step_assignment_id"], name: "index_dmsf_workflow_step_actions_on_workflow_step_assignment_id"
  end

  create_table "dmsf_workflow_step_assignments", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "dmsf_workflow_step_id", null: false
    t.integer "user_id", null: false
    t.integer "dmsf_file_revision_id", null: false
    t.index ["dmsf_workflow_step_id", "dmsf_file_revision_id"], name: "index_dmsf_wrkfl_step_assigns_on_wrkfl_step_id_and_frev_id", unique: true
  end

  create_table "dmsf_workflow_steps", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "dmsf_workflow_id", null: false
    t.integer "step", null: false
    t.integer "user_id", null: false
    t.integer "operator", null: false
    t.string "name", limit: 30
    t.index ["dmsf_workflow_id"], name: "index_dmsf_workflow_steps_on_dmsf_workflow_id"
  end

  create_table "dmsf_workflows", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", null: false
    t.integer "project_id"
    t.integer "status", default: 1, null: false
    t.datetime "updated_on"
    t.datetime "created_on"
    t.integer "author_id"
  end

  create_table "documents", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", default: 0, null: false
    t.integer "category_id", default: 0, null: false
    t.string "title", default: "", null: false
    t.text "description"
    t.datetime "created_on"
    t.index ["category_id"], name: "index_documents_on_category_id"
    t.index ["created_on"], name: "index_documents_on_created_on"
    t.index ["project_id"], name: "documents_project_id"
  end

  create_table "email_addresses", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "user_id", null: false
    t.string "address", null: false
    t.boolean "is_default", default: false, null: false
    t.boolean "notify", default: true, null: false
    t.datetime "created_on", null: false
    t.datetime "updated_on", null: false
    t.index ["user_id"], name: "index_email_addresses_on_user_id"
  end

  create_table "enabled_modules", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id"
    t.string "name", null: false
    t.index ["project_id"], name: "enabled_modules_project_id"
  end

  create_table "enumerations", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", limit: 30, default: "", null: false
    t.integer "position"
    t.boolean "is_default", default: false, null: false
    t.string "type"
    t.boolean "active", default: true, null: false
    t.integer "project_id"
    t.integer "parent_id"
    t.string "position_name", limit: 30
    t.index ["id", "type"], name: "index_enumerations_on_id_and_type"
    t.index ["project_id"], name: "index_enumerations_on_project_id"
  end

  create_table "git_caches", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.text "command"
    t.binary "command_output", size: :long
    t.string "repo_identifier"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "github_comments", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "github_id", null: false
    t.integer "journal_id", null: false
    t.index ["github_id", "journal_id"], name: "index_github_comments_on_github_id_and_journal_id", unique: true
  end

  create_table "github_issues", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "github_id", null: false
    t.integer "issue_id", null: false
    t.index ["github_id", "issue_id"], name: "index_github_issues_on_github_id_and_issue_id", unique: true
  end

  create_table "gitolite_public_keys", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "title"
    t.string "identifier"
    t.text "key"
    t.string "fingerprint"
    t.boolean "delete_when_unused", default: true
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "key_type", default: 0
    t.index ["fingerprint"], name: "index_gitolite_public_keys_on_fingerprint", unique: true
    t.index ["identifier"], name: "index_gitolite_public_keys_on_identifier"
    t.index ["title", "user_id"], name: "index_gitolite_public_keys_on_title_and_user_id", unique: true
    t.index ["user_id"], name: "index_gitolite_public_keys_on_user_id"
  end

  create_table "groups_users", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "group_id", null: false
    t.integer "user_id", null: false
    t.index ["group_id", "user_id"], name: "groups_users_ids", unique: true
  end

  create_table "import_items", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "import_id", null: false
    t.integer "position", null: false
    t.integer "obj_id"
    t.text "message"
    t.string "unique_id"
    t.index ["import_id", "unique_id"], name: "index_import_items_on_import_id_and_unique_id"
  end

  create_table "imports", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "type"
    t.integer "user_id", null: false
    t.string "filename"
    t.text "settings"
    t.integer "total_items"
    t.boolean "finished", default: false, null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "issue_categories", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", default: 0, null: false
    t.string "name", limit: 60, default: "", null: false
    t.integer "assigned_to_id"
    t.index ["assigned_to_id"], name: "index_issue_categories_on_assigned_to_id"
    t.index ["project_id"], name: "issue_categories_project_id"
  end

  create_table "issue_relations", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "issue_from_id", null: false
    t.integer "issue_to_id", null: false
    t.string "relation_type", default: "", null: false
    t.integer "delay"
    t.index ["issue_from_id", "issue_to_id"], name: "index_issue_relations_on_issue_from_id_and_issue_to_id", unique: true
    t.index ["issue_from_id"], name: "index_issue_relations_on_issue_from_id"
    t.index ["issue_to_id"], name: "index_issue_relations_on_issue_to_id"
  end

  create_table "issue_statuses", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", limit: 30, default: "", null: false
    t.boolean "is_closed", default: false, null: false
    t.integer "position"
    t.integer "default_done_ratio"
    t.index ["is_closed"], name: "index_issue_statuses_on_is_closed"
    t.index ["position"], name: "index_issue_statuses_on_position"
  end

  create_table "issues", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "tracker_id", null: false
    t.integer "project_id", null: false
    t.string "subject", default: "", null: false
    t.text "description", size: :long
    t.date "due_date"
    t.integer "category_id"
    t.integer "status_id", null: false
    t.integer "assigned_to_id"
    t.integer "priority_id", null: false
    t.integer "fixed_version_id"
    t.integer "author_id", null: false
    t.integer "lock_version", default: 0, null: false
    t.datetime "created_on"
    t.datetime "updated_on"
    t.date "start_date"
    t.integer "done_ratio", default: 0, null: false
    t.float "estimated_hours"
    t.integer "parent_id"
    t.integer "root_id"
    t.integer "lft"
    t.integer "rgt"
    t.boolean "is_private", default: false, null: false
    t.datetime "closed_on"
    t.integer "s2b_position"
    t.integer "position", default: 1, null: false
    t.float "remaining_hours"
    t.integer "release_id"
    t.float "story_points"
    t.string "release_relationship", default: "auto", null: false
    t.index ["assigned_to_id"], name: "index_issues_on_assigned_to_id"
    t.index ["author_id"], name: "index_issues_on_author_id"
    t.index ["category_id"], name: "index_issues_on_category_id"
    t.index ["created_on"], name: "index_issues_on_created_on"
    t.index ["fixed_version_id"], name: "index_issues_on_fixed_version_id"
    t.index ["parent_id"], name: "index_issues_on_parent_id"
    t.index ["position"], name: "index_issues_on_position"
    t.index ["priority_id"], name: "index_issues_on_priority_id"
    t.index ["project_id"], name: "issues_project_id"
    t.index ["release_id"], name: "index_issues_on_release_id"
    t.index ["release_relationship"], name: "index_issues_on_release_relationship"
    t.index ["root_id", "lft", "rgt"], name: "index_issues_on_root_id_and_lft_and_rgt"
    t.index ["status_id"], name: "index_issues_on_status_id"
    t.index ["tracker_id"], name: "index_issues_on_tracker_id"
  end

  create_table "journal_details", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "journal_id", default: 0, null: false
    t.string "property", limit: 30, default: "", null: false
    t.string "prop_key", limit: 30, default: "", null: false
    t.text "old_value", size: :long
    t.text "value", size: :long
    t.index ["journal_id"], name: "journal_details_journal_id"
  end

  create_table "journals", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "journalized_id", default: 0, null: false
    t.string "journalized_type", limit: 30, default: "", null: false
    t.integer "user_id", default: 0, null: false
    t.text "notes", size: :long
    t.datetime "created_on", null: false
    t.boolean "private_notes", default: false, null: false
    t.index ["created_on"], name: "index_journals_on_created_on"
    t.index ["journalized_id", "journalized_type"], name: "journals_journalized_id"
    t.index ["journalized_id"], name: "index_journals_on_journalized_id"
    t.index ["user_id"], name: "index_journals_on_user_id"
  end

  create_table "member_roles", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "member_id", null: false
    t.integer "role_id", null: false
    t.integer "inherited_from"
    t.index ["inherited_from"], name: "index_member_roles_on_inherited_from"
    t.index ["member_id"], name: "index_member_roles_on_member_id"
    t.index ["role_id"], name: "index_member_roles_on_role_id"
  end

  create_table "members", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "user_id", default: 0, null: false
    t.integer "project_id", default: 0, null: false
    t.datetime "created_on"
    t.boolean "mail_notification", default: false, null: false
    t.boolean "dmsf_mail_notification"
    t.text "title_format", size: :tiny
    t.index ["project_id"], name: "index_members_on_project_id"
    t.index ["user_id", "project_id"], name: "index_members_on_user_id_and_project_id", unique: true
    t.index ["user_id"], name: "index_members_on_user_id"
  end

  create_table "messages", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "board_id", null: false
    t.integer "parent_id"
    t.string "subject", default: "", null: false
    t.text "content"
    t.integer "author_id"
    t.integer "replies_count", default: 0, null: false
    t.integer "last_reply_id"
    t.datetime "created_on", null: false
    t.datetime "updated_on", null: false
    t.boolean "locked", default: false
    t.integer "sticky", default: 0
    t.index ["author_id"], name: "index_messages_on_author_id"
    t.index ["board_id"], name: "messages_board_id"
    t.index ["created_on"], name: "index_messages_on_created_on"
    t.index ["last_reply_id"], name: "index_messages_on_last_reply_id"
    t.index ["parent_id"], name: "messages_parent_id"
  end

  create_table "news", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id"
    t.string "title", limit: 60, default: "", null: false
    t.string "summary", default: ""
    t.text "description"
    t.integer "author_id", default: 0, null: false
    t.datetime "created_on"
    t.integer "comments_count", default: 0, null: false
    t.index ["author_id"], name: "index_news_on_author_id"
    t.index ["created_on"], name: "index_news_on_created_on"
    t.index ["project_id"], name: "news_project_id"
  end

  create_table "projects", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", default: "", null: false
    t.text "description"
    t.string "homepage", default: ""
    t.boolean "is_public", default: true, null: false
    t.integer "parent_id"
    t.datetime "created_on"
    t.datetime "updated_on"
    t.string "identifier"
    t.integer "status", default: 1, null: false
    t.integer "lft"
    t.integer "rgt"
    t.boolean "inherit_members", default: false, null: false
    t.string "landing_page"
    t.text "dmsf_description"
    t.boolean "dmsf_notification", default: false
    t.integer "default_version_id"
    t.integer "default_assigned_to_id"
    t.text "new_ticket_message"
    t.integer "enable_new_ticket_message", default: 1, null: false
    t.integer "default_issue_query_id"
    t.index ["identifier"], name: "index_projects_on_identifier"
    t.index ["lft"], name: "index_projects_on_lft"
    t.index ["rgt"], name: "index_projects_on_rgt"
  end

  create_table "projects_trackers", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", default: 0, null: false
    t.integer "tracker_id", default: 0, null: false
    t.index ["project_id", "tracker_id"], name: "projects_trackers_unique", unique: true
    t.index ["project_id"], name: "projects_trackers_project_id"
  end

  create_table "protected_branches_members", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "protected_branch_id"
    t.integer "principal_id"
    t.integer "inherited_by"
    t.index ["protected_branch_id", "principal_id", "inherited_by"], name: "unique_protected_branch_member", unique: true
  end

  create_table "queries", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id"
    t.string "name", default: "", null: false
    t.text "filters"
    t.integer "user_id", default: 0, null: false
    t.text "column_names"
    t.text "sort_criteria"
    t.string "group_by"
    t.string "type"
    t.integer "visibility", default: 0
    t.text "options"
    t.index ["project_id"], name: "index_queries_on_project_id"
    t.index ["user_id"], name: "index_queries_on_user_id"
  end

  create_table "queries_roles", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "query_id", null: false
    t.integer "role_id", null: false
    t.index ["query_id", "role_id"], name: "queries_roles_ids", unique: true
  end

  create_table "rb_issue_history", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "issue_id", default: 0, null: false
    t.text "history", size: :medium
    t.index ["issue_id"], name: "index_rb_issue_history_on_issue_id", unique: true
  end

  create_table "rb_project_settings", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id"
    t.boolean "show_stories_from_subprojects", default: true, null: false
    t.boolean "show_in_scrum_stats", default: true, null: false
  end

  create_table "rb_release_burnchart_day_caches", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "issue_id", null: false
    t.integer "release_id", null: false
    t.date "day", null: false
    t.float "total_points", default: 0.0, null: false
    t.float "added_points", default: 0.0, null: false
    t.float "closed_points", default: 0.0, null: false
    t.index ["day"], name: "index_rb_release_burnchart_day_caches_on_day"
    t.index ["issue_id"], name: "index_rb_release_burnchart_day_caches_on_issue_id"
    t.index ["release_id"], name: "index_rb_release_burnchart_day_caches_on_release_id"
  end

  create_table "rb_releases_multiview", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", null: false
    t.text "description"
    t.integer "project_id"
    t.text "release_ids"
  end

  create_table "rb_sprint_burndown", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "version_id", default: 0, null: false
    t.text "stories"
    t.text "burndown"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["version_id"], name: "index_rb_sprint_burndown_on_version_id", unique: true
  end

  create_table "releases", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", null: false
    t.date "release_start_date", null: false
    t.date "release_end_date", null: false
    t.integer "project_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "sharing", default: "none", null: false
    t.string "status", default: "open", null: false
    t.text "description"
    t.float "planned_velocity"
    t.index ["project_id"], name: "index_releases_on_project_id"
    t.index ["release_end_date"], name: "index_releases_on_release_end_date"
    t.index ["release_start_date"], name: "index_releases_on_release_start_date"
    t.index ["sharing"], name: "index_releases_on_sharing"
    t.index ["status"], name: "index_releases_on_status"
  end

  create_table "repositories", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", default: 0, null: false
    t.string "url", default: "", null: false
    t.string "login", limit: 60, default: ""
    t.string "password", default: ""
    t.string "root_url", default: ""
    t.string "type"
    t.string "path_encoding", limit: 64
    t.string "log_encoding", limit: 64
    t.text "extra_info", size: :long
    t.string "identifier"
    t.boolean "is_default", default: false
    t.datetime "created_on"
    t.index ["identifier", "project_id"], name: "index_repositories_on_identifier_and_project_id"
    t.index ["identifier"], name: "index_repositories_on_identifier"
    t.index ["project_id"], name: "index_repositories_on_project_id"
  end

  create_table "repository_deployment_credentials", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "repository_id"
    t.integer "gitolite_public_key_id"
    t.integer "user_id"
    t.boolean "active", default: true
    t.string "perm", null: false
    t.index ["gitolite_public_key_id"], name: "index_deployment_credentials_on_gitolite_public_key_id"
    t.index ["repository_id", "gitolite_public_key_id"], name: "index_deployment_credentials_on_repo_id_and_public_key_id", unique: true
    t.index ["repository_id"], name: "index_deployment_credentials_on_repository_id"
  end

  create_table "repository_git_config_keys", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "repository_id"
    t.string "key"
    t.string "value"
    t.string "type"
    t.index ["key", "type", "repository_id"], name: "unique_key_name", unique: true
    t.index ["repository_id"], name: "index_repository_git_config_keys_on_repository_id"
  end

  create_table "repository_git_extras", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "repository_id"
    t.boolean "git_daemon", default: true
    t.boolean "git_http", default: false
    t.boolean "git_https", default: false
    t.boolean "git_go", default: false
    t.boolean "git_ssh", default: true
    t.string "key"
    t.boolean "git_notify", default: true
    t.boolean "git_annex", default: false
    t.string "default_branch", null: false
    t.boolean "protected_branch", default: false
    t.boolean "public_repo", default: false
    t.text "urls_order"
    t.string "notification_sender"
    t.string "notification_prefix"
    t.index ["repository_id"], name: "index_repository_git_extras_on_repository_id", unique: true
  end

  create_table "repository_mirrors", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.boolean "active", default: true
    t.string "url"
    t.integer "push_mode", default: 0
    t.boolean "include_all_branches", default: false
    t.boolean "include_all_tags", default: false
    t.string "explicit_refspec", default: ""
    t.integer "repository_id"
    t.index ["repository_id"], name: "index_repository_mirrors_on_repository_id"
    t.index ["url", "repository_id"], name: "index_repository_mirrors_on_url_and_repository_id", unique: true
  end

  create_table "repository_post_receive_urls", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.boolean "active", default: true
    t.string "url"
    t.string "mode", default: "github"
    t.integer "repository_id"
    t.boolean "use_triggers", default: false
    t.text "triggers"
    t.boolean "split_payloads", default: false
    t.index ["repository_id"], name: "index_repository_post_receive_urls_on_repository_id"
    t.index ["url", "repository_id"], name: "index_repository_post_receive_urls_on_url_and_repository_id", unique: true
  end

  create_table "repository_protected_branches", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "repository_id"
    t.string "path"
    t.string "permissions"
    t.integer "position"
    t.index ["repository_id"], name: "index_repository_protected_branches_on_repository_id"
  end

  create_table "roles", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", default: "", null: false
    t.integer "position"
    t.boolean "assignable", default: true
    t.integer "builtin", default: 0, null: false
    t.text "permissions"
    t.string "issues_visibility", limit: 30, default: "default", null: false
    t.string "users_visibility", limit: 30, default: "all", null: false
    t.string "time_entries_visibility", limit: 30, default: "all", null: false
    t.boolean "all_roles_managed", default: true, null: false
    t.text "settings"
    t.boolean "hide", default: false, null: false
  end

  create_table "roles_managed_roles", id: false, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "role_id", null: false
    t.integer "managed_role_id", null: false
    t.index ["role_id", "managed_role_id"], name: "index_roles_managed_roles_on_role_id_and_managed_role_id", unique: true
  end

  create_table "settings", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", default: "", null: false
    t.text "value"
    t.datetime "updated_on"
    t.index ["name"], name: "index_settings_on_name"
  end

  create_table "time_entries", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", null: false
    t.integer "author_id"
    t.integer "user_id", null: false
    t.integer "issue_id"
    t.float "hours", null: false
    t.string "comments", limit: 1024
    t.integer "activity_id", null: false
    t.date "spent_on", null: false
    t.integer "tyear", null: false
    t.integer "tmonth", null: false
    t.integer "tweek", null: false
    t.datetime "created_on", null: false
    t.datetime "updated_on", null: false
    t.index ["activity_id"], name: "index_time_entries_on_activity_id"
    t.index ["created_on"], name: "index_time_entries_on_created_on"
    t.index ["issue_id"], name: "time_entries_issue_id"
    t.index ["project_id"], name: "time_entries_project_id"
    t.index ["user_id"], name: "index_time_entries_on_user_id"
  end

  create_table "tokens", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "user_id", default: 0, null: false
    t.string "action", limit: 30, default: "", null: false
    t.string "value", limit: 40, default: "", null: false
    t.datetime "created_on", null: false
    t.datetime "updated_on"
    t.index ["user_id"], name: "index_tokens_on_user_id"
    t.index ["value"], name: "tokens_value", unique: true
  end

  create_table "trackers", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "name", limit: 30, default: "", null: false
    t.string "description"
    t.integer "position"
    t.boolean "is_in_roadmap", default: true, null: false
    t.integer "fields_bits", default: 0
    t.integer "default_status_id"
  end

  create_table "user_preferences", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "user_id", default: 0, null: false
    t.text "others"
    t.boolean "hide_mail", default: true
    t.string "time_zone"
    t.boolean "autowatch_involved_issue", default: true, null: false
    t.index ["user_id"], name: "index_user_preferences_on_user_id"
  end

  create_table "users", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "login", default: "", null: false
    t.string "hashed_password", limit: 40, default: "", null: false
    t.string "firstname", limit: 30, default: "", null: false
    t.string "lastname", default: "", null: false
    t.boolean "admin", default: false, null: false
    t.integer "status", default: 1, null: false
    t.datetime "last_login_on"
    t.string "language", limit: 5, default: ""
    t.integer "auth_source_id"
    t.datetime "created_on"
    t.datetime "updated_on"
    t.string "type"
    t.string "mail_notification", default: "", null: false
    t.string "salt", limit: 64
    t.string "landing_page"
    t.boolean "must_change_passwd", default: false, null: false
    t.datetime "passwd_changed_on"
    t.boolean "stealth_allowed", default: false
    t.string "twofa_scheme"
    t.string "twofa_totp_key"
    t.integer "twofa_totp_last_used_at"
    t.boolean "twofa_required", default: false
    t.index ["auth_source_id"], name: "index_users_on_auth_source_id"
    t.index ["id", "type"], name: "index_users_on_id_and_type"
    t.index ["login", "type"], name: "login-type"
    t.index ["type"], name: "index_users_on_type"
  end

  create_table "versions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", default: 0, null: false
    t.string "name", default: "", null: false
    t.string "description", default: ""
    t.date "effective_date"
    t.datetime "created_on"
    t.datetime "updated_on"
    t.string "wiki_page_title"
    t.string "status", default: "open"
    t.string "sharing", default: "none", null: false
    t.date "sprint_start_date"
    t.index ["project_id"], name: "versions_project_id"
    t.index ["sharing"], name: "index_versions_on_sharing"
  end

  create_table "watchers", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.string "watchable_type", default: "", null: false
    t.integer "watchable_id", default: 0, null: false
    t.integer "user_id"
    t.index ["user_id", "watchable_type"], name: "watchers_user_id_type"
    t.index ["user_id"], name: "index_watchers_on_user_id"
    t.index ["watchable_id", "watchable_type"], name: "index_watchers_on_watchable_id_and_watchable_type"
  end

  create_table "wiki_content_versions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "wiki_content_id", null: false
    t.integer "page_id", null: false
    t.integer "author_id"
    t.binary "data", size: :long
    t.string "compression", limit: 6, default: ""
    t.string "comments", limit: 1024, default: ""
    t.datetime "updated_on", null: false
    t.integer "version", null: false
    t.index ["updated_on"], name: "index_wiki_content_versions_on_updated_on"
    t.index ["wiki_content_id"], name: "wiki_content_versions_wcid"
  end

  create_table "wiki_contents", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "page_id", null: false
    t.integer "author_id"
    t.text "text", size: :long
    t.string "comments", limit: 1024, default: ""
    t.datetime "updated_on", null: false
    t.integer "version", null: false
    t.index ["author_id"], name: "index_wiki_contents_on_author_id"
    t.index ["page_id"], name: "wiki_contents_page_id"
  end

  create_table "wiki_pages", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "wiki_id", null: false
    t.string "title", null: false
    t.datetime "created_on", null: false
    t.boolean "protected", default: false, null: false
    t.integer "parent_id"
    t.index ["parent_id"], name: "index_wiki_pages_on_parent_id"
    t.index ["wiki_id", "title"], name: "wiki_pages_wiki_id_title"
    t.index ["wiki_id"], name: "index_wiki_pages_on_wiki_id"
  end

  create_table "wiki_redirects", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "wiki_id", null: false
    t.string "title"
    t.string "redirects_to"
    t.datetime "created_on", null: false
    t.integer "redirects_to_wiki_id", null: false
    t.index ["wiki_id", "title"], name: "wiki_redirects_wiki_id_title"
    t.index ["wiki_id"], name: "index_wiki_redirects_on_wiki_id"
  end

  create_table "wikis", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "project_id", null: false
    t.string "start_page", null: false
    t.integer "status", default: 1, null: false
    t.index ["project_id"], name: "wikis_project_id"
  end

  create_table "workflows", id: :integer, charset: "utf8mb3", collation: "utf8mb3_general_ci", force: :cascade do |t|
    t.integer "tracker_id", default: 0, null: false
    t.integer "old_status_id", default: 0, null: false
    t.integer "new_status_id", default: 0, null: false
    t.integer "role_id", default: 0, null: false
    t.boolean "assignee", default: false, null: false
    t.boolean "author", default: false, null: false
    t.string "type", limit: 30
    t.string "field_name", limit: 30
    t.string "rule", limit: 30
    t.index ["new_status_id"], name: "index_workflows_on_new_status_id"
    t.index ["old_status_id"], name: "index_workflows_on_old_status_id"
    t.index ["role_id", "tracker_id", "old_status_id"], name: "wkfs_role_tracker_old_status"
    t.index ["role_id"], name: "index_workflows_on_role_id"
    t.index ["tracker_id"], name: "index_workflows_on_tracker_id"
  end

  add_foreign_key "dashboard_roles", "dashboards", on_delete: :cascade
  add_foreign_key "dashboard_roles", "roles", on_delete: :cascade
  add_foreign_key "dashboards", "projects", on_delete: :cascade
  add_foreign_key "dashboards", "users", column: "author_id", on_delete: :cascade
end
