add trashable concern on user

This commit is contained in:
João Geonizeli
2022-07-31 21:17:22 -03:00
parent 4a2d2d1a67
commit eff96cd102
10 changed files with 221 additions and 168 deletions

View File

@@ -37,6 +37,7 @@ COPY Gemfile* package.json yarn.lock $APP_PATH
# shared-mime-info ref: https://vtex.slack.com/archives/CE16Q9XRT/p1616716948056900 # shared-mime-info ref: https://vtex.slack.com/archives/CE16Q9XRT/p1616716948056900
RUN apk update && \ RUN apk update && \
apk add --no-cache \ apk add --no-cache \
watchman \
git \ git \
build-base \ build-base \
postgresql-dev \ postgresql-dev \

View File

@@ -1,6 +1,30 @@
ActiveAdmin.register User do ActiveAdmin.register User do
permit_params :email, :name, roles: [] permit_params :email, :name, roles: []
scope :all, default: true
scope :trashed
controller do
def show
@user = User.unscoped.find_by!(permitted_params[:user])
end
def edit
@user = User.unscoped.find_by!(permitted_params[:user])
end
def destroy
@user = User.unscoped.find(permitted_params[:id])
if @user.deleted_at
redirect_to admin_users_path, notice: t('active_admin.user.already_destroyed')
else
@user.destroy
redirect_to admin_users_path, notice: t('active_admin.user.succesfully_destroyed')
end
end
end
index do index do
selectable_column selectable_column
id_column id_column
@@ -8,6 +32,8 @@ ActiveAdmin.register User do
column :name column :name
column :created_at column :created_at
actions actions
actions
end end
filter :email filter :email

View File

@@ -0,0 +1,21 @@
module Trashable
extend ActiveSupport::Concern
included do
default_scope { where(deleted_at: nil) }
end
module ClassMethods
def trashed
self.unscoped.where(self.arel_table[:deleted_at].not_eq(nil))
end
end
def destroy
update_column :deleted_at, Time.now
end
def recover
update_attribute :deleted_at, nil
end
end

View File

@@ -4,6 +4,7 @@
# #
# id :bigint not null, primary key # id :bigint not null, primary key
# avatar_url :string # avatar_url :string
# deleted_at :datetime
# email :string default(""), not null # email :string default(""), not null
# encrypted_password :string default(""), not null # encrypted_password :string default(""), not null
# name :string not null # name :string not null
@@ -20,6 +21,7 @@
# index_users_on_reset_password_token (reset_password_token) UNIQUE # index_users_on_reset_password_token (reset_password_token) UNIQUE
# #
class User < ApplicationRecord class User < ApplicationRecord
include Trashable
extend Enumerize extend Enumerize
devise :database_authenticatable, devise :database_authenticatable,
@@ -38,7 +40,6 @@ class User < ApplicationRecord
before_validation :set_random_password, on: :create before_validation :set_random_password, on: :create
roles.values.each do |role| roles.values.each do |role|
define_method "#{role}?" do define_method "#{role}?" do
roles.include?(role) roles.include?(role)

View File

@@ -78,6 +78,9 @@ pt-BR:
action_label: "%{title} Selecionado" action_label: "%{title} Selecionado"
labels: labels:
destroy: "Excluir" destroy: "Excluir"
scopes:
all: Ativos
trashed: Excluídos
comments: comments:
created_at: "Criado em" created_at: "Criado em"
resource_type: "Tipo de Objeto" resource_type: "Tipo de Objeto"
@@ -140,4 +143,7 @@ pt-BR:
table: "Tabela" table: "Tabela"
block: "Lista" block: "Lista"
grid: "Grid" grid: "Grid"
blog: "Blog" blog: "Blog"
user:
succesfully_destroyed: 'Usuário removido com sucesso.'
already_destroyed: "Usuário já está removido."

View File

@@ -0,0 +1,5 @@
class AddDeletedAtToUser < ActiveRecord::Migration[7.0]
def change
add_column :users, :deleted_at, :datetime
end
end

3
db/schema.rb generated
View File

@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_07_25_225343) do ActiveRecord::Schema[7.0].define(version: 2022_07_31_232807) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@@ -147,6 +147,7 @@ ActiveRecord::Schema[7.0].define(version: 2022_07_25_225343) do
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "avatar_url" t.string "avatar_url"
t.string "roles", default: [], array: true t.string "roles", default: [], array: true
t.datetime "deleted_at"
t.index ["email"], name: "index_users_on_email", 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 ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end end

320
erd.svg
View File

@@ -4,30 +4,30 @@
<!-- Generated by graphviz version 4.0.0 (0) <!-- Generated by graphviz version 4.0.0 (0)
--> -->
<!-- Title: ProgressTest Pages: 1 --> <!-- Title: ProgressTest Pages: 1 -->
<svg width="965pt" height="691pt" <svg width="1052pt" height="717pt"
viewBox="0.00 0.00 965.10 690.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 1051.60 716.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(28.8 661.8)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(28.8 687.8)">
<title>ProgressTest</title> <title>ProgressTest</title>
<polygon fill="white" stroke="transparent" points="-28.8,28.8 -28.8,-661.8 936.3,-661.8 936.3,28.8 -28.8,28.8"/> <polygon fill="white" stroke="transparent" points="-28.8,28.8 -28.8,-687.8 1022.8,-687.8 1022.8,28.8 -28.8,28.8"/>
<text text-anchor="middle" x="453.75" y="-618.6" font-family="Arial Bold" font-size="13.00">Progress Test &#45; Models</text> <text text-anchor="middle" x="497" y="-644.6" font-family="Arial Bold" font-size="13.00">Progress Test &#45; Models</text>
<!-- m_ActiveAdmin::Comment --> <!-- m_ActiveAdmin::Comment -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>m_ActiveAdmin::Comment</title> <title>m_ActiveAdmin::Comment</title>
<path fill="none" stroke="black" d="M12,-487.5C12,-487.5 132,-487.5 132,-487.5 138,-487.5 144,-493.5 144,-499.5 144,-499.5 144,-583.5 144,-583.5 144,-589.5 138,-595.5 132,-595.5 132,-595.5 12,-595.5 12,-595.5 6,-595.5 0,-589.5 0,-583.5 0,-583.5 0,-499.5 0,-499.5 0,-493.5 6,-487.5 12,-487.5"/> <path fill="none" stroke="black" d="M12,-513.5C12,-513.5 132,-513.5 132,-513.5 138,-513.5 144,-519.5 144,-525.5 144,-525.5 144,-609.5 144,-609.5 144,-615.5 138,-621.5 132,-621.5 132,-621.5 12,-621.5 12,-621.5 6,-621.5 0,-615.5 0,-609.5 0,-609.5 0,-525.5 0,-525.5 0,-519.5 6,-513.5 12,-513.5"/>
<text text-anchor="start" x="6.5" y="-582.7" font-family="Arial Bold" font-size="11.00">ActiveAdmin::Comment</text> <text text-anchor="start" x="6.5" y="-608.7" font-family="Arial Bold" font-size="11.00">ActiveAdmin::Comment</text>
<polyline fill="none" stroke="black" points="0,-575.5 144,-575.5 "/> <polyline fill="none" stroke="black" points="0,-601.5 144,-601.5 "/>
<text text-anchor="start" x="7" y="-562.5" font-family="Arial" font-size="10.00">author_id </text> <text text-anchor="start" x="7" y="-588.5" font-family="Arial" font-size="10.00">author_id </text>
<text text-anchor="start" x="50" y="-562.5" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text> <text text-anchor="start" x="50" y="-588.5" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text>
<text text-anchor="start" x="7" y="-549.5" font-family="Arial" font-size="10.00">author_type </text> <text text-anchor="start" x="7" y="-575.5" font-family="Arial" font-size="10.00">author_type </text>
<text text-anchor="start" x="62" y="-549.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="62" y="-575.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="7" y="-536.5" font-family="Arial" font-size="10.00">body </text> <text text-anchor="start" x="7" y="-562.5" font-family="Arial" font-size="10.00">body </text>
<text text-anchor="start" x="32" y="-536.5" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="32" y="-562.5" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="7" y="-523.5" font-family="Arial" font-size="10.00">namespace </text> <text text-anchor="start" x="7" y="-549.5" font-family="Arial" font-size="10.00">namespace </text>
<text text-anchor="start" x="61" y="-523.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="61" y="-549.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="7" y="-510.5" font-family="Arial" font-size="10.00">resource_id </text> <text text-anchor="start" x="7" y="-536.5" font-family="Arial" font-size="10.00">resource_id </text>
<text text-anchor="start" x="61" y="-510.5" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text> <text text-anchor="start" x="61" y="-536.5" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text>
<text text-anchor="start" x="7" y="-497.5" font-family="Arial" font-size="10.00">resource_type </text> <text text-anchor="start" x="7" y="-523.5" font-family="Arial" font-size="10.00">resource_type </text>
<text text-anchor="start" x="72" y="-497.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="72" y="-523.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_ActiveStorage::Attachment --> <!-- m_ActiveStorage::Attachment -->
<g id="node2" class="node"> <g id="node2" class="node">
@@ -43,228 +43,218 @@
<!-- m_ActiveStorage::Blob --> <!-- m_ActiveStorage::Blob -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>m_ActiveStorage::Blob</title> <title>m_ActiveStorage::Blob</title>
<path fill="none" stroke="black" d="M197,-329.5C197,-329.5 317,-329.5 317,-329.5 323,-329.5 329,-335.5 329,-341.5 329,-341.5 329,-438.5 329,-438.5 329,-444.5 323,-450.5 317,-450.5 317,-450.5 197,-450.5 197,-450.5 191,-450.5 185,-444.5 185,-438.5 185,-438.5 185,-341.5 185,-341.5 185,-335.5 191,-329.5 197,-329.5"/> <path fill="none" stroke="black" d="M197,-342.5C197,-342.5 317,-342.5 317,-342.5 323,-342.5 329,-348.5 329,-354.5 329,-354.5 329,-451.5 329,-451.5 329,-457.5 323,-463.5 317,-463.5 317,-463.5 197,-463.5 197,-463.5 191,-463.5 185,-457.5 185,-451.5 185,-451.5 185,-354.5 185,-354.5 185,-348.5 191,-342.5 197,-342.5"/>
<text text-anchor="start" x="201.5" y="-437.7" font-family="Arial Bold" font-size="11.00">ActiveStorage::Blob</text> <text text-anchor="start" x="201.5" y="-450.7" font-family="Arial Bold" font-size="11.00">ActiveStorage::Blob</text>
<polyline fill="none" stroke="black" points="185,-430.5 329,-430.5 "/> <polyline fill="none" stroke="black" points="185,-443.5 329,-443.5 "/>
<text text-anchor="start" x="192" y="-417" font-family="Arial" font-size="10.00">byte_size </text> <text text-anchor="start" x="192" y="-430" font-family="Arial" font-size="10.00">byte_size </text>
<text text-anchor="start" x="238" y="-417" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text> <text text-anchor="start" x="238" y="-430" font-family="Arial Italic" font-size="10.00" fill="#999999">integer (8)</text>
<text text-anchor="start" x="192" y="-404" font-family="Arial" font-size="10.00">checksum </text> <text text-anchor="start" x="192" y="-417" font-family="Arial" font-size="10.00">checksum </text>
<text text-anchor="start" x="241" y="-404" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="241" y="-417" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="192" y="-391" font-family="Arial" font-size="10.00">content_type </text> <text text-anchor="start" x="192" y="-404" font-family="Arial" font-size="10.00">content_type </text>
<text text-anchor="start" x="252" y="-391" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="252" y="-404" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="192" y="-378" font-family="Arial" font-size="10.00">filename </text> <text text-anchor="start" x="192" y="-391" font-family="Arial" font-size="10.00">filename </text>
<text text-anchor="start" x="232" y="-378" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="232" y="-391" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="192" y="-365" font-family="Arial" font-size="10.00">key </text> <text text-anchor="start" x="192" y="-378" font-family="Arial" font-size="10.00">key </text>
<text text-anchor="start" x="211" y="-365" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="211" y="-378" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="192" y="-352" font-family="Arial" font-size="10.00">metadata </text> <text text-anchor="start" x="192" y="-365" font-family="Arial" font-size="10.00">metadata </text>
<text text-anchor="start" x="236" y="-352" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="236" y="-365" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="192" y="-339" font-family="Arial" font-size="10.00">service_name </text> <text text-anchor="start" x="192" y="-352" font-family="Arial" font-size="10.00">service_name </text>
<text text-anchor="start" x="256" y="-339" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="256" y="-352" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Attachment --> <!-- m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Attachment -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Attachment</title> <title>m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Attachment</title>
<path fill="none" stroke="black" d="M257,-329.43C257,-293.37 257,-249.1 257,-221.21"/> <path fill="none" stroke="black" d="M257,-342.4C257,-302.42 257,-251.67 257,-221.07"/>
</g> </g>
<!-- m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Blob --> <!-- m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Blob -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Blob</title> <title>m_ActiveStorage::Blob&#45;&gt;m_ActiveStorage::Blob</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M329.18,-417.51C345.79,-415.14 358,-405.97 358,-390 358,-374.03 345.79,-364.86 329.18,-362.49"/> <path fill="none" stroke="black" stroke-dasharray="1,5" d="M329.18,-433.07C345.79,-430.48 358,-420.46 358,-403 358,-385.54 345.79,-375.52 329.18,-372.93"/>
</g> </g>
<!-- m_ActiveStorage::VariantRecord --> <!-- m_ActiveStorage::VariantRecord -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>m_ActiveStorage::VariantRecord</title> <title>m_ActiveStorage::VariantRecord</title>
<path fill="none" stroke="black" d="M185.5,-520C185.5,-520 328.5,-520 328.5,-520 334.5,-520 340.5,-526 340.5,-532 340.5,-532 340.5,-551 340.5,-551 340.5,-557 334.5,-563 328.5,-563 328.5,-563 185.5,-563 185.5,-563 179.5,-563 173.5,-557 173.5,-551 173.5,-551 173.5,-532 173.5,-532 173.5,-526 179.5,-520 185.5,-520"/> <path fill="none" stroke="black" d="M185.5,-546C185.5,-546 328.5,-546 328.5,-546 334.5,-546 340.5,-552 340.5,-558 340.5,-558 340.5,-577 340.5,-577 340.5,-583 334.5,-589 328.5,-589 328.5,-589 185.5,-589 185.5,-589 179.5,-589 173.5,-583 173.5,-577 173.5,-577 173.5,-558 173.5,-558 173.5,-552 179.5,-546 185.5,-546"/>
<text text-anchor="start" x="179" y="-550.2" font-family="Arial Bold" font-size="11.00">ActiveStorage::VariantRecord</text> <text text-anchor="start" x="179" y="-576.2" font-family="Arial Bold" font-size="11.00">ActiveStorage::VariantRecord</text>
<polyline fill="none" stroke="black" points="173.5,-543 340.5,-543 "/> <polyline fill="none" stroke="black" points="173.5,-569 340.5,-569 "/>
<text text-anchor="start" x="192" y="-529.5" font-family="Arial" font-size="10.00">variation_digest </text> <text text-anchor="start" x="192" y="-555.5" font-family="Arial" font-size="10.00">variation_digest </text>
<text text-anchor="start" x="264" y="-529.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="264" y="-555.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Attachment --> <!-- m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Attachment -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Attachment</title> <title>m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Attachment</title>
<path fill="none" stroke="black" d="M227.06,-519.68C206.72,-503.59 181.49,-479.31 170,-451 149.61,-400.76 154.69,-381.02 170,-329 182.2,-287.54 211.52,-246.8 232.76,-221.1"/> <path fill="none" stroke="black" d="M227.06,-545.68C206.72,-529.59 181.49,-505.31 170,-477 145.26,-416.05 151.43,-392.1 170,-329 182.2,-287.54 211.52,-246.8 232.76,-221.1"/>
</g> </g>
<!-- m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Blob --> <!-- m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Blob -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Blob</title> <title>m_ActiveStorage::VariantRecord&#45;&gt;m_ActiveStorage::Blob</title>
<path fill="none" stroke="black" d="M257,-519.71C257,-504.06 257,-481.64 257,-459.89"/> <path fill="none" stroke="black" d="M257,-545.92C257,-527.43 257,-499.21 257,-472.78"/>
<polygon fill="black" stroke="black" points="260.15,-459.63 257,-450.63 253.85,-459.63 260.15,-459.63"/> <polygon fill="black" stroke="black" points="260.15,-472.53 257,-463.53 253.85,-472.53 260.15,-472.53"/>
</g> </g>
<!-- m_Axis --> <!-- m_Axis -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>m_Axis</title> <title>m_Axis</title>
<path fill="none" stroke="black" d="M572,-520C572,-520 692,-520 692,-520 698,-520 704,-526 704,-532 704,-532 704,-551 704,-551 704,-557 698,-563 692,-563 692,-563 572,-563 572,-563 566,-563 560,-557 560,-551 560,-551 560,-532 560,-532 560,-526 566,-520 572,-520"/> <path fill="none" stroke="black" d="M689,-546C689,-546 809,-546 809,-546 815,-546 821,-552 821,-558 821,-558 821,-577 821,-577 821,-583 815,-589 809,-589 809,-589 689,-589 689,-589 683,-589 677,-583 677,-577 677,-577 677,-558 677,-558 677,-552 683,-546 689,-546"/>
<text text-anchor="start" x="618" y="-550.2" font-family="Arial Bold" font-size="11.00">Axis</text> <text text-anchor="start" x="735" y="-576.2" font-family="Arial Bold" font-size="11.00">Axis</text>
<polyline fill="none" stroke="black" points="560,-543 704,-543 "/> <polyline fill="none" stroke="black" points="677,-569 821,-569 "/>
<text text-anchor="start" x="567" y="-529.5" font-family="Arial" font-size="10.00">name </text> <text text-anchor="start" x="684" y="-555.5" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="595" y="-529.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text> <text text-anchor="start" x="712" y="-555.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
</g> </g>
<!-- m_Subject --> <!-- m_Subject -->
<g id="node12" class="node"> <g id="node11" class="node">
<title>m_Subject</title> <title>m_Subject</title>
<path fill="none" stroke="black" d="M561,-368.5C561,-368.5 681,-368.5 681,-368.5 687,-368.5 693,-374.5 693,-380.5 693,-380.5 693,-399.5 693,-399.5 693,-405.5 687,-411.5 681,-411.5 681,-411.5 561,-411.5 561,-411.5 555,-411.5 549,-405.5 549,-399.5 549,-399.5 549,-380.5 549,-380.5 549,-374.5 555,-368.5 561,-368.5"/> <path fill="none" stroke="black" d="M776,-381.5C776,-381.5 896,-381.5 896,-381.5 902,-381.5 908,-387.5 908,-393.5 908,-393.5 908,-412.5 908,-412.5 908,-418.5 902,-424.5 896,-424.5 896,-424.5 776,-424.5 776,-424.5 770,-424.5 764,-418.5 764,-412.5 764,-412.5 764,-393.5 764,-393.5 764,-387.5 770,-381.5 776,-381.5"/>
<text text-anchor="start" x="599" y="-398.7" font-family="Arial Bold" font-size="11.00">Subject</text> <text text-anchor="start" x="814" y="-411.7" font-family="Arial Bold" font-size="11.00">Subject</text>
<polyline fill="none" stroke="black" points="549,-391.5 693,-391.5 "/> <polyline fill="none" stroke="black" points="764,-404.5 908,-404.5 "/>
<text text-anchor="start" x="556" y="-378" font-family="Arial" font-size="10.00">name </text> <text text-anchor="start" x="771" y="-391" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="584" y="-378" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text> <text text-anchor="start" x="799" y="-391" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
</g> </g>
<!-- m_Axis&#45;&gt;m_Subject --> <!-- m_Axis&#45;&gt;m_Subject -->
<g id="edge15" class="edge"> <g id="edge13" class="edge">
<title>m_Axis&#45;&gt;m_Subject</title> <title>m_Axis&#45;&gt;m_Subject</title>
<path fill="none" stroke="black" d="M630.47,-519.71C628.58,-494.05 625.36,-450.22 623.2,-420.94"/> <path fill="none" stroke="black" d="M760.02,-545.92C775.34,-517.3 803.15,-465.36 820.54,-432.88"/>
<polygon fill="black" stroke="black" points="626.32,-420.36 622.52,-411.61 620.04,-420.82 626.32,-420.36"/> <polygon fill="black" stroke="black" points="823.46,-434.09 824.93,-424.67 817.91,-431.12 823.46,-434.09"/>
</g> </g>
<!-- m_Category --> <!-- m_Category -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>m_Category</title> <title>m_Category</title>
<path fill="none" stroke="black" d="M399,-520C399,-520 519,-520 519,-520 525,-520 531,-526 531,-532 531,-532 531,-551 531,-551 531,-557 525,-563 519,-563 519,-563 399,-563 399,-563 393,-563 387,-557 387,-551 387,-551 387,-532 387,-532 387,-526 393,-520 399,-520"/> <path fill="none" stroke="black" d="M862,-546C862,-546 982,-546 982,-546 988,-546 994,-552 994,-558 994,-558 994,-577 994,-577 994,-583 988,-589 982,-589 982,-589 862,-589 862,-589 856,-589 850,-583 850,-577 850,-577 850,-558 850,-558 850,-552 856,-546 862,-546"/>
<text text-anchor="start" x="432.5" y="-550.2" font-family="Arial Bold" font-size="11.00">Category</text> <text text-anchor="start" x="895.5" y="-576.2" font-family="Arial Bold" font-size="11.00">Category</text>
<polyline fill="none" stroke="black" points="387,-543 531,-543 "/> <polyline fill="none" stroke="black" points="850,-569 994,-569 "/>
<text text-anchor="start" x="394" y="-529.5" font-family="Arial" font-size="10.00">name </text> <text text-anchor="start" x="857" y="-555.5" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="422" y="-529.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text> <text text-anchor="start" x="885" y="-555.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
</g> </g>
<!-- m_Category&#45;&gt;m_Subject --> <!-- m_Category&#45;&gt;m_Subject -->
<g id="edge14" class="edge"> <g id="edge12" class="edge">
<title>m_Category&#45;&gt;m_Subject</title> <title>m_Category&#45;&gt;m_Subject</title>
<path fill="none" stroke="black" d="M481.53,-519.71C510.3,-493.16 560.15,-447.15 591.81,-417.94"/> <path fill="none" stroke="black" d="M911.11,-545.92C895.96,-517.3 868.48,-465.36 851.28,-432.88"/>
<polygon fill="black" stroke="black" points="594.19,-420.03 598.67,-411.61 589.92,-415.4 594.19,-420.03"/> <polygon fill="black" stroke="black" points="853.93,-431.15 846.94,-424.67 848.36,-434.1 853.93,-431.15"/>
</g> </g>
<!-- m_CkEditorUpload --> <!-- m_CkEditorUpload -->
<g id="node7" class="node"> <g id="node7" class="node">
<title>m_CkEditorUpload</title> <title>m_CkEditorUpload</title>
<path fill="none" stroke="black" d="M388,-372C388,-372 508,-372 508,-372 514,-372 520,-378 520,-384 520,-384 520,-396 520,-396 520,-402 514,-408 508,-408 508,-408 388,-408 388,-408 382,-408 376,-402 376,-396 376,-396 376,-384 376,-384 376,-378 382,-372 388,-372"/> <path fill="none" stroke="black" d="M388,-385C388,-385 508,-385 508,-385 514,-385 520,-391 520,-397 520,-397 520,-409 520,-409 520,-415 514,-421 508,-421 508,-421 388,-421 388,-421 382,-421 376,-415 376,-409 376,-409 376,-397 376,-397 376,-391 382,-385 388,-385"/>
<text text-anchor="start" x="403.5" y="-387.2" font-family="Arial Bold" font-size="11.00">CkEditorUpload</text> <text text-anchor="start" x="403.5" y="-400.2" font-family="Arial Bold" font-size="11.00">CkEditorUpload</text>
</g> </g>
<!-- m_CkEditorUpload&#45;&gt;m_ActiveStorage::Attachment --> <!-- m_CkEditorUpload&#45;&gt;m_ActiveStorage::Attachment -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>m_CkEditorUpload&#45;&gt;m_ActiveStorage::Attachment</title> <title>m_CkEditorUpload&#45;&gt;m_ActiveStorage::Attachment</title>
<path fill="none" stroke="black" d="M431.05,-371.7C397.73,-337.67 323.46,-261.85 283.56,-221.12"/> <path fill="none" stroke="black" d="M432.37,-384.98C399.32,-348.98 322.08,-264.88 282.05,-221.28"/>
</g> </g>
<!-- m_Question --> <!-- m_Question -->
<g id="node8" class="node"> <g id="node8" class="node">
<title>m_Question</title> <title>m_Question</title>
<path fill="none" stroke="black" d="M610,-93.5C610,-93.5 730,-93.5 730,-93.5 736,-93.5 742,-99.5 742,-105.5 742,-105.5 742,-280.5 742,-280.5 742,-286.5 736,-292.5 730,-292.5 730,-292.5 610,-292.5 610,-292.5 604,-292.5 598,-286.5 598,-280.5 598,-280.5 598,-105.5 598,-105.5 598,-99.5 604,-93.5 610,-93.5"/> <path fill="none" stroke="black" d="M737,-93.5C737,-93.5 857,-93.5 857,-93.5 863,-93.5 869,-99.5 869,-105.5 869,-105.5 869,-280.5 869,-280.5 869,-286.5 863,-292.5 857,-292.5 857,-292.5 737,-292.5 737,-292.5 731,-292.5 725,-286.5 725,-280.5 725,-280.5 725,-105.5 725,-105.5 725,-99.5 731,-93.5 737,-93.5"/>
<text text-anchor="start" x="644" y="-279.7" font-family="Arial Bold" font-size="11.00">Question</text> <text text-anchor="start" x="771" y="-279.7" font-family="Arial Bold" font-size="11.00">Question</text>
<polyline fill="none" stroke="black" points="598,-272.5 742,-272.5 "/> <polyline fill="none" stroke="black" points="725,-272.5 869,-272.5 "/>
<text text-anchor="start" x="605" y="-259" font-family="Arial" font-size="10.00">alternatives </text> <text text-anchor="start" x="732" y="-259" font-family="Arial" font-size="10.00">alternatives </text>
<text text-anchor="start" x="659" y="-259" font-family="Arial Italic" font-size="10.00" fill="#999999">jsonb</text> <text text-anchor="start" x="786" y="-259" font-family="Arial Italic" font-size="10.00" fill="#999999">jsonb</text>
<text text-anchor="start" x="605" y="-246" font-family="Arial" font-size="10.00">authorship </text> <text text-anchor="start" x="732" y="-246" font-family="Arial" font-size="10.00">authorship </text>
<text text-anchor="start" x="654" y="-246" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="781" y="-246" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-233" font-family="Arial" font-size="10.00">authorship_year </text> <text text-anchor="start" x="732" y="-233" font-family="Arial" font-size="10.00">authorship_year </text>
<text text-anchor="start" x="678" y="-233" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="805" y="-233" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-220" font-family="Arial" font-size="10.00">bloom_taxonomy </text> <text text-anchor="start" x="732" y="-220" font-family="Arial" font-size="10.00">bloom_taxonomy </text>
<text text-anchor="start" x="683" y="-220" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="810" y="-220" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-207" font-family="Arial" font-size="10.00">body </text> <text text-anchor="start" x="732" y="-207" font-family="Arial" font-size="10.00">body </text>
<text text-anchor="start" x="630" y="-207" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="757" y="-207" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="605" y="-194" font-family="Arial" font-size="10.00">check_type </text> <text text-anchor="start" x="732" y="-194" font-family="Arial" font-size="10.00">check_type </text>
<text text-anchor="start" x="659" y="-194" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="786" y="-194" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-181" font-family="Arial" font-size="10.00">difficulty </text> <text text-anchor="start" x="732" y="-181" font-family="Arial" font-size="10.00">difficulty </text>
<text text-anchor="start" x="645" y="-181" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="772" y="-181" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-168" font-family="Arial" font-size="10.00">explanation </text> <text text-anchor="start" x="732" y="-168" font-family="Arial" font-size="10.00">explanation </text>
<text text-anchor="start" x="658" y="-168" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="785" y="-168" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="605" y="-155" font-family="Arial" font-size="10.00">instruction </text> <text text-anchor="start" x="732" y="-155" font-family="Arial" font-size="10.00">instruction </text>
<text text-anchor="start" x="654" y="-155" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="781" y="-155" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="605" y="-142" font-family="Arial" font-size="10.00">intention </text> <text text-anchor="start" x="732" y="-142" font-family="Arial" font-size="10.00">intention </text>
<text text-anchor="start" x="645" y="-142" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="772" y="-142" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="605" y="-129" font-family="Arial" font-size="10.00">references </text> <text text-anchor="start" x="732" y="-129" font-family="Arial" font-size="10.00">references </text>
<text text-anchor="start" x="654" y="-129" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="781" y="-129" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
<text text-anchor="start" x="605" y="-116" font-family="Arial" font-size="10.00">status </text> <text text-anchor="start" x="732" y="-116" font-family="Arial" font-size="10.00">status </text>
<text text-anchor="start" x="636" y="-116" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="763" y="-116" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="605" y="-103" font-family="Arial" font-size="10.00">support </text> <text text-anchor="start" x="732" y="-103" font-family="Arial" font-size="10.00">support </text>
<text text-anchor="start" x="641" y="-103" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text> <text text-anchor="start" x="768" y="-103" font-family="Arial Italic" font-size="10.00" fill="#999999">text</text>
</g> </g>
<!-- m_ReviewMessage --> <!-- m_ReviewMessage -->
<g id="node9" class="node"> <g id="node9" class="node">
<title>m_ReviewMessage</title> <title>m_ReviewMessage</title>
<path fill="none" stroke="black" d="M755,-0.5C755,-0.5 875,-0.5 875,-0.5 881,-0.5 887,-6.5 887,-12.5 887,-12.5 887,-44.5 887,-44.5 887,-50.5 881,-56.5 875,-56.5 875,-56.5 755,-56.5 755,-56.5 749,-56.5 743,-50.5 743,-44.5 743,-44.5 743,-12.5 743,-12.5 743,-6.5 749,-0.5 755,-0.5"/> <path fill="none" stroke="black" d="M737,-0.5C737,-0.5 857,-0.5 857,-0.5 863,-0.5 869,-6.5 869,-12.5 869,-12.5 869,-44.5 869,-44.5 869,-50.5 863,-56.5 857,-56.5 857,-56.5 737,-56.5 737,-56.5 731,-56.5 725,-50.5 725,-44.5 725,-44.5 725,-12.5 725,-12.5 725,-6.5 731,-0.5 737,-0.5"/>
<text text-anchor="start" x="771" y="-43.7" font-family="Arial Bold" font-size="11.00">ReviewMessage</text> <text text-anchor="start" x="753" y="-43.7" font-family="Arial Bold" font-size="11.00">ReviewMessage</text>
<polyline fill="none" stroke="black" points="743,-36.5 887,-36.5 "/> <polyline fill="none" stroke="black" points="725,-36.5 869,-36.5 "/>
<text text-anchor="start" x="750" y="-23.5" font-family="Arial" font-size="10.00">content </text> <text text-anchor="start" x="732" y="-23.5" font-family="Arial" font-size="10.00">content </text>
<text text-anchor="start" x="786" y="-23.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="768" y="-23.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="750" y="-10.5" font-family="Arial" font-size="10.00">feedback_type </text> <text text-anchor="start" x="732" y="-10.5" font-family="Arial" font-size="10.00">feedback_type </text>
<text text-anchor="start" x="817" y="-10.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="799" y="-10.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_Question&#45;&gt;m_ReviewMessage --> <!-- m_Question&#45;&gt;m_ReviewMessage -->
<g id="edge9" class="edge"> <g id="edge10" class="edge">
<title>m_Question&#45;&gt;m_ReviewMessage</title> <title>m_Question&#45;&gt;m_ReviewMessage</title>
<path fill="none" stroke="black" d="M742.08,-111.23C757.09,-94.4 772.12,-77.55 784.61,-63.56"/> <path fill="none" stroke="black" d="M797,-93.26C797,-83.5 797,-74.1 797,-65.65"/>
<polygon fill="black" stroke="black" points="787.25,-65.33 790.89,-56.52 782.55,-61.14 787.25,-65.33"/> <polygon fill="black" stroke="black" points="800.15,-65.55 797,-56.55 793.85,-65.55 800.15,-65.55"/>
</g> </g>
<!-- m_ReviewRequest --> <!-- m_ReviewRequest -->
<g id="node10" class="node"> <g id="node10" class="node">
<title>m_ReviewRequest</title> <title>m_ReviewRequest</title>
<path fill="none" stroke="black" d="M582,-7C582,-7 702,-7 702,-7 708,-7 714,-13 714,-19 714,-19 714,-38 714,-38 714,-44 708,-50 702,-50 702,-50 582,-50 582,-50 576,-50 570,-44 570,-38 570,-38 570,-19 570,-19 570,-13 576,-7 582,-7"/> <path fill="none" stroke="black" d="M564,-7C564,-7 684,-7 684,-7 690,-7 696,-13 696,-19 696,-19 696,-38 696,-38 696,-44 690,-50 684,-50 684,-50 564,-50 564,-50 558,-50 552,-44 552,-38 552,-38 552,-19 552,-19 552,-13 558,-7 564,-7"/>
<text text-anchor="start" x="599" y="-37.2" font-family="Arial Bold" font-size="11.00">ReviewRequest</text> <text text-anchor="start" x="581" y="-37.2" font-family="Arial Bold" font-size="11.00">ReviewRequest</text>
<polyline fill="none" stroke="black" points="570,-30 714,-30 "/> <polyline fill="none" stroke="black" points="552,-30 696,-30 "/>
<text text-anchor="start" x="577" y="-16.5" font-family="Arial" font-size="10.00">answered </text> <text text-anchor="start" x="559" y="-16.5" font-family="Arial" font-size="10.00">answered </text>
<text text-anchor="start" x="623" y="-16.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text> <text text-anchor="start" x="605" y="-16.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_Question&#45;&gt;m_ReviewRequest --> <!-- m_Question&#45;&gt;m_ReviewRequest -->
<g id="edge7" class="edge"> <g id="edge7" class="edge">
<title>m_Question&#45;&gt;m_ReviewRequest</title> <title>m_Question&#45;&gt;m_ReviewRequest</title>
<path fill="none" stroke="black" d="M652.99,-93.26C650.85,-80.87 648.81,-69.05 647.09,-59.03"/> <path fill="none" stroke="black" d="M724.89,-124.26C699.51,-100.42 672.43,-74.99 652.72,-56.48"/>
<polygon fill="black" stroke="black" points="650.17,-58.34 645.53,-50.01 643.96,-59.41 650.17,-58.34"/> <polygon fill="black" stroke="black" points="654.79,-54.1 646.07,-50.23 650.48,-58.69 654.79,-54.1"/>
</g>
<!-- m_Role -->
<g id="node11" class="node">
<title>m_Role</title>
<path fill="none" stroke="black" d="M755,-520C755,-520 875,-520 875,-520 881,-520 887,-526 887,-532 887,-532 887,-551 887,-551 887,-557 881,-563 875,-563 875,-563 755,-563 755,-563 749,-563 743,-557 743,-551 743,-551 743,-532 743,-532 743,-526 749,-520 755,-520"/>
<text text-anchor="start" x="800.5" y="-550.2" font-family="Arial Bold" font-size="11.00">Role</text>
<polyline fill="none" stroke="black" points="743,-543 887,-543 "/>
<text text-anchor="start" x="750" y="-529.5" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="778" y="-529.5" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
</g>
<!-- m_User -->
<g id="node13" class="node">
<title>m_User</title>
<path fill="none" stroke="black" d="M734.5,-336C734.5,-336 895.5,-336 895.5,-336 901.5,-336 907.5,-342 907.5,-348 907.5,-348 907.5,-432 907.5,-432 907.5,-438 901.5,-444 895.5,-444 895.5,-444 734.5,-444 734.5,-444 728.5,-444 722.5,-438 722.5,-432 722.5,-432 722.5,-348 722.5,-348 722.5,-342 728.5,-336 734.5,-336"/>
<text text-anchor="start" x="800.5" y="-431.2" font-family="Arial Bold" font-size="11.00">User</text>
<polyline fill="none" stroke="black" points="722.5,-424 907.5,-424 "/>
<text text-anchor="start" x="730" y="-411" font-family="Arial" font-size="10.00">email </text>
<text text-anchor="start" x="757" y="-411" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
<text text-anchor="start" x="730" y="-398" font-family="Arial" font-size="10.00">encrypted_password </text>
<text text-anchor="start" x="824" y="-398" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="730" y="-385" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="758" y="-385" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="730" y="-372" font-family="Arial" font-size="10.00">remember_created_at </text>
<text text-anchor="start" x="828" y="-372" font-family="Arial Italic" font-size="10.00" fill="#999999">datetime (6,0)</text>
<text text-anchor="start" x="730" y="-359" font-family="Arial" font-size="10.00">reset_password_sent_at </text>
<text text-anchor="start" x="840" y="-359" font-family="Arial Italic" font-size="10.00" fill="#999999">datetime (6,0)</text>
<text text-anchor="start" x="730" y="-346" font-family="Arial" font-size="10.00">reset_password_token </text>
<text text-anchor="start" x="832" y="-346" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g>
<!-- m_Role&#45;&gt;m_User -->
<g id="edge16" class="edge">
<title>m_Role&#45;&gt;m_User</title>
<path fill="none" stroke="black" d="M815,-510.65C815,-494.16 815,-473.04 815,-453.14"/>
<polygon fill="black" stroke="black" points="811.85,-510.71 815,-519.71 818.15,-510.71 811.85,-510.71"/>
<polygon fill="black" stroke="black" points="818.15,-453.11 815,-444.11 811.85,-453.11 818.15,-453.11"/>
</g> </g>
<!-- m_Subject&#45;&gt;m_Question --> <!-- m_Subject&#45;&gt;m_Question -->
<g id="edge12" class="edge"> <g id="edge14" class="edge">
<title>m_Subject&#45;&gt;m_Question</title> <title>m_Subject&#45;&gt;m_Question</title>
<path fill="none" stroke="black" d="M626.24,-368.13C630.4,-351.61 636.54,-327.15 642.92,-301.76"/> <path fill="none" stroke="black" d="M832.12,-381.3C828.52,-362.12 822.88,-332.05 817.17,-301.57"/>
<polygon fill="black" stroke="black" points="646.05,-302.25 645.19,-292.75 639.94,-300.71 646.05,-302.25"/> <polygon fill="black" stroke="black" points="820.23,-300.81 815.48,-292.54 814.04,-301.97 820.23,-300.81"/>
</g>
<!-- m_User -->
<g id="node12" class="node">
<title>m_User</title>
<path fill="none" stroke="black" d="M561.5,-329.5C561.5,-329.5 722.5,-329.5 722.5,-329.5 728.5,-329.5 734.5,-335.5 734.5,-341.5 734.5,-341.5 734.5,-464.5 734.5,-464.5 734.5,-470.5 728.5,-476.5 722.5,-476.5 722.5,-476.5 561.5,-476.5 561.5,-476.5 555.5,-476.5 549.5,-470.5 549.5,-464.5 549.5,-464.5 549.5,-341.5 549.5,-341.5 549.5,-335.5 555.5,-329.5 561.5,-329.5"/>
<text text-anchor="start" x="627.5" y="-463.7" font-family="Arial Bold" font-size="11.00">User</text>
<polyline fill="none" stroke="black" points="549.5,-456.5 734.5,-456.5 "/>
<text text-anchor="start" x="557" y="-443" font-family="Arial" font-size="10.00">avatar_url </text>
<text text-anchor="start" x="603" y="-443" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="557" y="-430" font-family="Arial" font-size="10.00">deleted_at </text>
<text text-anchor="start" x="606" y="-430" font-family="Arial Italic" font-size="10.00" fill="#999999">datetime (6,0)</text>
<text text-anchor="start" x="557" y="-417" font-family="Arial" font-size="10.00">email </text>
<text text-anchor="start" x="584" y="-417" font-family="Arial Italic" font-size="10.00" fill="#999999">string U</text>
<text text-anchor="start" x="557" y="-404" font-family="Arial" font-size="10.00">encrypted_password </text>
<text text-anchor="start" x="651" y="-404" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="557" y="-391" font-family="Arial" font-size="10.00">name </text>
<text text-anchor="start" x="585" y="-391" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="557" y="-378" font-family="Arial" font-size="10.00">remember_created_at </text>
<text text-anchor="start" x="655" y="-378" font-family="Arial Italic" font-size="10.00" fill="#999999">datetime (6,0)</text>
<text text-anchor="start" x="557" y="-365" font-family="Arial" font-size="10.00">reset_password_sent_at </text>
<text text-anchor="start" x="667" y="-365" font-family="Arial Italic" font-size="10.00" fill="#999999">datetime (6,0)</text>
<text text-anchor="start" x="557" y="-352" font-family="Arial" font-size="10.00">reset_password_token </text>
<text text-anchor="start" x="659" y="-352" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
<text text-anchor="start" x="557" y="-339" font-family="Arial" font-size="10.00">roles </text>
<text text-anchor="start" x="582" y="-339" font-family="Arial Italic" font-size="10.00" fill="#999999">string</text>
</g> </g>
<!-- m_User&#45;&gt;m_Question --> <!-- m_User&#45;&gt;m_Question -->
<g id="edge11" class="edge"> <g id="edge15" class="edge">
<title>m_User&#45;&gt;m_Question</title> <title>m_User&#45;&gt;m_Question</title>
<path fill="none" stroke="black" d="M775.57,-335.97C766.8,-324.17 757.2,-311.27 747.48,-298.2"/> <path fill="none" stroke="black" d="M696.21,-329.25C703.73,-319.16 711.57,-308.64 719.41,-298.12"/>
<polygon fill="black" stroke="black" points="749.97,-296.27 742.08,-290.93 744.92,-300.03 749.97,-296.27"/> <polygon fill="black" stroke="black" points="721.99,-299.93 724.84,-290.84 716.94,-296.17 721.99,-299.93"/>
</g> </g>
<!-- m_User&#45;&gt;m_ReviewMessage --> <!-- m_User&#45;&gt;m_ReviewMessage -->
<g id="edge10" class="edge"> <g id="edge11" class="edge">
<title>m_User&#45;&gt;m_ReviewMessage</title> <title>m_User&#45;&gt;m_ReviewMessage</title>
<path fill="none" stroke="black" d="M815,-192C804.57,-149.75 806.71,-99.41 810.06,-66.07"/> <path fill="none" stroke="black" d="M652,-192C661.91,-141.75 676.61,-130.96 711,-93 721.11,-81.84 733.46,-71.37 745.6,-62.28"/>
<polygon fill="black" stroke="black" points="813.23,-66.01 811.07,-56.72 806.97,-65.33 813.23,-66.01"/> <polygon fill="black" stroke="black" points="747.7,-64.65 753.11,-56.8 743.99,-59.56 747.7,-64.65"/>
</g> </g>
<!-- m_User&#45;&gt;m_ReviewRequest --> <!-- m_User&#45;&gt;m_ReviewRequest -->
<g id="edge8" class="edge"> <g id="edge8" class="edge">
<title>m_User&#45;&gt;m_ReviewRequest</title> <title>m_User&#45;&gt;m_ReviewRequest</title>
<path fill="none" stroke="black" d="M821.82,-335.62C825.25,-295.95 826.56,-240.84 815,-194"/> <path fill="none" stroke="black" d="M640.31,-329.17C640.67,-288.97 643.26,-238.34 652,-194"/>
<path fill="none" stroke="black" d="M815,-192C802.78,-142.49 793.51,-128.6 757,-93 740.92,-77.33 720.21,-64.32 700.8,-54.24"/> <path fill="none" stroke="black" d="M652,-192C661.16,-145.53 646.79,-91.25 635.47,-58.67"/>
<polygon fill="black" stroke="black" points="702.03,-51.34 692.58,-50.11 699.2,-56.97 702.03,-51.34"/> <polygon fill="black" stroke="black" points="638.39,-57.48 632.38,-50.08 632.46,-59.61 638.39,-57.48"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -4,6 +4,7 @@
# #
# id :bigint not null, primary key # id :bigint not null, primary key
# avatar_url :string # avatar_url :string
# deleted_at :datetime
# email :string default(""), not null # email :string default(""), not null
# encrypted_password :string default(""), not null # encrypted_password :string default(""), not null
# name :string not null # name :string not null

View File

@@ -4,6 +4,7 @@
# #
# id :bigint not null, primary key # id :bigint not null, primary key
# avatar_url :string # avatar_url :string
# deleted_at :datetime
# email :string default(""), not null # email :string default(""), not null
# encrypted_password :string default(""), not null # encrypted_password :string default(""), not null
# name :string not null # name :string not null