2014-08-01 03:07:16 -07:00
|
|
|
# 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.
|
|
|
|
#
|
2022-01-11 17:24:38 -08:00
|
|
|
# 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.
|
2014-08-01 03:07:16 -07:00
|
|
|
#
|
|
|
|
# It's strongly recommended that you check this file into your version control system.
|
|
|
|
|
2022-07-18 15:04:44 -07:00
|
|
|
ActiveRecord::Schema.define(version: 2022_07_18_214748) do
|
2014-10-27 22:36:38 -07:00
|
|
|
|
|
|
|
# These are extensions that must be enabled in order to support this database
|
|
|
|
enable_extension "plpgsql"
|
|
|
|
|
2020-04-19 12:12:22 -07:00
|
|
|
create_table "announcements", force: :cascade do |t|
|
|
|
|
t.text "content", null: false
|
|
|
|
t.string "link_text"
|
|
|
|
t.string "link_href"
|
|
|
|
t.datetime "starts_at", null: false
|
|
|
|
t.datetime "ends_at", null: false
|
|
|
|
t.bigint "user_id", null: false
|
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
|
|
|
t.index ["user_id"], name: "index_announcements_on_user_id"
|
|
|
|
end
|
|
|
|
|
2022-06-14 08:09:10 -07:00
|
|
|
create_table "anonymous_blocks", force: :cascade do |t|
|
|
|
|
t.string "identifier"
|
|
|
|
t.datetime "created_at", precision: 6, null: false
|
|
|
|
t.datetime "updated_at", precision: 6, null: false
|
2022-07-14 14:39:04 -07:00
|
|
|
t.bigint "question_id"
|
2022-07-16 06:55:09 -07:00
|
|
|
t.bigint "user_id"
|
2022-06-14 08:09:10 -07:00
|
|
|
t.index ["identifier"], name: "index_anonymous_blocks_on_identifier"
|
|
|
|
t.index ["question_id"], name: "index_anonymous_blocks_on_question_id"
|
|
|
|
t.index ["user_id"], name: "index_anonymous_blocks_on_user_id"
|
|
|
|
end
|
|
|
|
|
2020-07-04 11:12:53 -07:00
|
|
|
create_table "answers", id: :bigint, default: -> { "gen_timestamp_id('answers'::text)" }, force: :cascade do |t|
|
2020-04-19 09:10:31 -07:00
|
|
|
t.text "content"
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "question_id"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "comment_count", default: 0, null: false
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id"
|
2014-10-27 22:36:38 -07:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "smile_count", default: 0, null: false
|
2020-05-09 03:07:18 -07:00
|
|
|
t.index ["question_id"], name: "index_answers_on_question_id"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["user_id", "created_at"], name: "index_answers_on_user_id_and_created_at"
|
2014-10-27 22:36:38 -07:00
|
|
|
end
|
|
|
|
|
2022-07-05 13:31:15 -07:00
|
|
|
create_table "appendables", force: :cascade do |t|
|
|
|
|
t.string "type", null: false
|
|
|
|
t.bigint "user_id", null: false
|
|
|
|
t.bigint "parent_id", null: false
|
|
|
|
t.string "parent_type", null: false
|
|
|
|
t.text "content"
|
|
|
|
t.datetime "created_at", precision: 6, null: false
|
|
|
|
t.datetime "updated_at", precision: 6, null: false
|
|
|
|
t.index ["parent_id", "parent_type"], name: "index_appendables_on_parent_id_and_parent_type"
|
|
|
|
t.index ["user_id", "created_at"], name: "index_appendables_on_user_id_and_created_at"
|
|
|
|
end
|
|
|
|
|
2020-07-04 11:12:53 -07:00
|
|
|
create_table "comments", id: :bigint, default: -> { "gen_timestamp_id('comments'::text)" }, force: :cascade do |t|
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "content"
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "answer_id"
|
|
|
|
t.bigint "user_id"
|
2014-10-27 22:36:38 -07:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "smile_count", default: 0, null: false
|
2020-05-09 03:07:18 -07:00
|
|
|
t.index ["answer_id"], name: "index_comments_on_answer_id"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["user_id", "created_at"], name: "index_comments_on_user_id_and_created_at"
|
2014-10-27 22:36:38 -07:00
|
|
|
end
|
|
|
|
|
2020-05-25 09:04:54 -07:00
|
|
|
create_table "inboxes", id: :serial, force: :cascade do |t|
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id"
|
|
|
|
t.bigint "question_id"
|
2020-05-25 09:04:54 -07:00
|
|
|
t.boolean "new"
|
2015-01-10 14:29:04 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2022-04-15 12:45:19 -07:00
|
|
|
t.index ["question_id"], name: "index_inboxes_on_question_id"
|
2020-05-25 09:04:54 -07:00
|
|
|
t.index ["user_id"], name: "index_inboxes_on_user_id"
|
2015-01-10 14:29:04 -08:00
|
|
|
end
|
|
|
|
|
2020-05-25 09:04:54 -07:00
|
|
|
create_table "list_members", id: :serial, force: :cascade do |t|
|
|
|
|
t.integer "list_id", null: false
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id", null: false
|
2015-01-08 04:16:13 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-05-25 09:04:54 -07:00
|
|
|
t.index ["list_id", "user_id"], name: "index_list_members_on_list_id_and_user_id", unique: true
|
2015-01-08 04:16:13 -08:00
|
|
|
end
|
|
|
|
|
2020-05-25 09:04:54 -07:00
|
|
|
create_table "lists", id: :serial, force: :cascade do |t|
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id", null: false
|
2020-05-25 09:04:54 -07:00
|
|
|
t.string "name"
|
|
|
|
t.string "display_name"
|
|
|
|
t.boolean "private", default: true
|
2014-11-10 14:45:36 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-05-25 09:04:54 -07:00
|
|
|
t.index ["user_id", "name"], name: "index_lists_on_user_id_and_name", unique: true
|
2014-11-10 14:45:36 -08:00
|
|
|
end
|
|
|
|
|
2022-01-02 06:30:04 -08:00
|
|
|
create_table "mute_rules", id: :bigint, default: -> { "gen_timestamp_id('mute_rules'::text)" }, force: :cascade do |t|
|
2021-12-22 10:21:09 -08:00
|
|
|
t.string "muted_phrase"
|
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
2022-07-16 06:55:09 -07:00
|
|
|
t.bigint "user_id"
|
2021-12-22 10:21:09 -08:00
|
|
|
t.index ["user_id"], name: "index_mute_rules_on_user_id"
|
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "notifications", id: :serial, force: :cascade do |t|
|
|
|
|
t.string "target_type"
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "target_id"
|
|
|
|
t.bigint "recipient_id"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.boolean "new"
|
2014-12-13 10:30:10 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2021-12-28 05:56:23 -08:00
|
|
|
t.index ["new"], name: "index_notifications_on_new"
|
|
|
|
t.index ["recipient_id"], name: "index_notifications_on_recipient_id"
|
2014-12-13 10:30:10 -08:00
|
|
|
end
|
|
|
|
|
2021-12-19 07:51:04 -08:00
|
|
|
create_table "profiles", force: :cascade do |t|
|
|
|
|
t.bigint "user_id"
|
|
|
|
t.string "display_name"
|
2021-12-19 14:51:06 -08:00
|
|
|
t.string "description", default: "", null: false
|
|
|
|
t.string "location", default: "", null: false
|
|
|
|
t.string "website", default: "", null: false
|
|
|
|
t.string "motivation_header", default: "", null: false
|
2021-12-19 07:51:04 -08:00
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
2022-06-21 05:50:51 -07:00
|
|
|
t.string "anon_display_name"
|
2021-12-19 07:51:04 -08:00
|
|
|
t.index ["user_id"], name: "index_profiles_on_user_id"
|
|
|
|
end
|
|
|
|
|
2020-07-04 11:12:53 -07:00
|
|
|
create_table "questions", id: :bigint, default: -> { "gen_timestamp_id('questions'::text)" }, force: :cascade do |t|
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "content"
|
|
|
|
t.boolean "author_is_anonymous"
|
2022-06-14 07:11:00 -07:00
|
|
|
t.string "author_identifier"
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id"
|
2014-10-27 22:36:38 -07:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "answer_count", default: 0, null: false
|
2021-08-11 07:56:58 -07:00
|
|
|
t.boolean "direct", default: false, null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["user_id", "created_at"], name: "index_questions_on_user_id_and_created_at"
|
2014-10-27 22:36:38 -07:00
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "relationships", id: :serial, force: :cascade do |t|
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "source_id"
|
|
|
|
t.bigint "target_id"
|
2014-11-30 05:06:05 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2021-12-31 13:19:21 -08:00
|
|
|
t.string "type", null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["source_id", "target_id"], name: "index_relationships_on_source_id_and_target_id", unique: true
|
|
|
|
t.index ["source_id"], name: "index_relationships_on_source_id"
|
|
|
|
t.index ["target_id"], name: "index_relationships_on_target_id"
|
2021-12-31 13:19:21 -08:00
|
|
|
t.index ["type"], name: "index_relationships_on_type"
|
2014-11-30 05:06:05 -08:00
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "reports", id: :serial, force: :cascade do |t|
|
|
|
|
t.string "type", null: false
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "target_id", null: false
|
|
|
|
t.bigint "user_id", null: false
|
2014-12-27 05:35:09 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.boolean "deleted", default: false
|
|
|
|
t.string "reason"
|
2020-05-09 03:07:18 -07:00
|
|
|
t.index ["type", "target_id"], name: "index_reports_on_type_and_target_id"
|
|
|
|
t.index ["user_id", "created_at"], name: "index_reports_on_user_id_and_created_at"
|
2014-12-27 05:35:09 -08:00
|
|
|
end
|
|
|
|
|
2020-04-19 13:35:58 -07:00
|
|
|
create_table "roles", force: :cascade do |t|
|
|
|
|
t.string "name"
|
|
|
|
t.string "resource_type"
|
|
|
|
t.bigint "resource_id"
|
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
|
|
|
t.index ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id"
|
2022-01-11 17:24:38 -08:00
|
|
|
t.index ["resource_type", "resource_id"], name: "index_roles_on_resource"
|
2020-04-19 13:35:58 -07:00
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "services", id: :serial, force: :cascade do |t|
|
|
|
|
t.string "type", null: false
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id", null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "uid"
|
|
|
|
t.string "access_token"
|
|
|
|
t.string "access_secret"
|
|
|
|
t.string "nickname"
|
2014-12-12 12:42:34 -08:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2022-01-04 16:00:18 -08:00
|
|
|
t.string "post_tag", limit: 20
|
2020-05-09 03:07:18 -07:00
|
|
|
t.index ["user_id"], name: "index_services_on_user_id"
|
2014-12-12 12:42:34 -08:00
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "subscriptions", id: :serial, force: :cascade do |t|
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id", null: false
|
|
|
|
t.bigint "answer_id", null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
|
|
|
t.boolean "is_active", default: true
|
2020-05-09 03:07:18 -07:00
|
|
|
t.index ["user_id", "answer_id"], name: "index_subscriptions_on_user_id_and_answer_id"
|
2015-04-21 15:31:51 -07:00
|
|
|
end
|
|
|
|
|
2020-04-19 09:10:31 -07:00
|
|
|
create_table "themes", id: :serial, force: :cascade do |t|
|
2020-07-04 11:12:53 -07:00
|
|
|
t.bigint "user_id", null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "primary_color", default: 6174129
|
|
|
|
t.integer "primary_text", default: 16777215
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "danger_color", default: 14431557
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "danger_text", default: 16777215
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "success_color", default: 2664261
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "success_text", default: 16777215
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "warning_color", default: 16761095
|
2020-05-07 10:28:26 -07:00
|
|
|
t.integer "warning_text", default: 2697513
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "info_color", default: 1548984
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "info_text", default: 16777215
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "dark_color", default: 3422784
|
|
|
|
t.integer "dark_text", default: 15658734
|
|
|
|
t.integer "raised_background", default: 16777215
|
|
|
|
t.integer "background_color", default: 15789556
|
|
|
|
t.integer "body_text", default: 0
|
|
|
|
t.integer "muted_text", default: 7107965
|
2020-04-19 09:10:31 -07:00
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "input_color", default: 15789556, null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "input_text", default: 0, null: false
|
2020-05-04 16:49:01 -07:00
|
|
|
t.integer "raised_accent", default: 16250871
|
|
|
|
t.integer "light_color", default: 16316922
|
|
|
|
t.integer "light_text", default: 0
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["user_id", "created_at"], name: "index_themes_on_user_id_and_created_at"
|
2015-09-16 14:59:47 -07:00
|
|
|
end
|
|
|
|
|
2020-11-01 08:55:31 -08:00
|
|
|
create_table "totp_recovery_codes", force: :cascade do |t|
|
|
|
|
t.bigint "user_id"
|
|
|
|
t.string "code", limit: 8
|
|
|
|
t.index ["user_id", "code"], name: "index_totp_recovery_codes_on_user_id_and_code"
|
|
|
|
end
|
|
|
|
|
2021-08-14 07:07:12 -07:00
|
|
|
create_table "user_bans", force: :cascade do |t|
|
|
|
|
t.bigint "user_id"
|
|
|
|
t.string "reason"
|
|
|
|
t.datetime "expires_at"
|
|
|
|
t.bigint "banned_by_id"
|
|
|
|
t.datetime "created_at", null: false
|
|
|
|
t.datetime "updated_at", null: false
|
|
|
|
end
|
|
|
|
|
2020-07-04 11:12:53 -07:00
|
|
|
create_table "users", id: :bigint, default: -> { "gen_timestamp_id('users'::text)" }, force: :cascade do |t|
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "email", default: "", null: false
|
|
|
|
t.string "encrypted_password", default: "", null: false
|
|
|
|
t.string "reset_password_token"
|
2014-08-01 03:07:16 -07:00
|
|
|
t.datetime "reset_password_sent_at"
|
|
|
|
t.datetime "remember_created_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.integer "sign_in_count", default: 0, null: false
|
2014-08-01 03:07:16 -07:00
|
|
|
t.datetime "current_sign_in_at"
|
|
|
|
t.datetime "last_sign_in_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "current_sign_in_ip"
|
|
|
|
t.string "last_sign_in_ip"
|
2014-08-01 03:07:16 -07:00
|
|
|
t.datetime "created_at"
|
|
|
|
t.datetime "updated_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "screen_name"
|
|
|
|
t.integer "asked_count", default: 0, null: false
|
|
|
|
t.integer "answered_count", default: 0, null: false
|
|
|
|
t.integer "commented_count", default: 0, null: false
|
|
|
|
t.integer "smiled_count", default: 0, null: false
|
|
|
|
t.string "profile_picture_file_name"
|
|
|
|
t.boolean "profile_picture_processing"
|
2020-05-17 12:14:40 -07:00
|
|
|
t.integer "profile_picture_x"
|
|
|
|
t.integer "profile_picture_y"
|
|
|
|
t.integer "profile_picture_w"
|
|
|
|
t.integer "profile_picture_h"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.boolean "privacy_allow_anonymous_questions", default: true
|
|
|
|
t.boolean "privacy_allow_public_timeline", default: true
|
|
|
|
t.boolean "privacy_allow_stranger_answers", default: true
|
|
|
|
t.boolean "privacy_show_in_search", default: true
|
|
|
|
t.integer "comment_smiled_count", default: 0, null: false
|
|
|
|
t.string "profile_header_file_name"
|
|
|
|
t.boolean "profile_header_processing"
|
2020-05-17 12:14:40 -07:00
|
|
|
t.integer "profile_header_x"
|
|
|
|
t.integer "profile_header_y"
|
|
|
|
t.integer "profile_header_w"
|
|
|
|
t.integer "profile_header_h"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "locale", default: "en"
|
|
|
|
t.string "confirmation_token"
|
2015-07-21 08:55:28 -07:00
|
|
|
t.datetime "confirmed_at"
|
|
|
|
t.datetime "confirmation_sent_at"
|
2020-04-19 09:10:31 -07:00
|
|
|
t.string "unconfirmed_email"
|
|
|
|
t.boolean "show_foreign_themes", default: true, null: false
|
|
|
|
t.string "export_url"
|
|
|
|
t.boolean "export_processing", default: false, null: false
|
2016-01-05 09:03:39 -08:00
|
|
|
t.datetime "export_created_at"
|
2020-10-18 01:39:46 -07:00
|
|
|
t.string "otp_secret_key"
|
2020-12-24 17:07:37 -08:00
|
|
|
t.integer "otp_module", default: 0, null: false
|
2020-04-19 09:10:31 -07:00
|
|
|
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
|
|
|
|
t.index ["email"], name: "index_users_on_email", unique: true
|
|
|
|
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
|
|
|
|
t.index ["screen_name"], name: "index_users_on_screen_name", unique: true
|
2014-08-01 03:07:16 -07:00
|
|
|
end
|
|
|
|
|
2020-04-19 13:35:58 -07:00
|
|
|
create_table "users_roles", id: false, force: :cascade do |t|
|
|
|
|
t.bigint "user_id"
|
|
|
|
t.bigint "role_id"
|
|
|
|
t.index ["role_id"], name: "index_users_roles_on_role_id"
|
|
|
|
t.index ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id"
|
|
|
|
t.index ["user_id"], name: "index_users_roles_on_user_id"
|
|
|
|
end
|
|
|
|
|
2021-12-25 14:58:04 -08:00
|
|
|
add_foreign_key "profiles", "users"
|
2014-08-01 03:07:16 -07:00
|
|
|
end
|