Olá,
Gostaria de reportar algumas validações/restrições que existem nos modelos, mas estão faltando no banco de dados.
Requisitos NOT NULL ausentes
PostDetail - key, value são obrigatórios no modelo, mas são permitidos como nulos no banco de dados.
-
Obrigatório no modelo (
app/models/post_detail.rb):validates_presence_of :key, :value…Mas nulo no banco de dados
discourse_development=# \d post_details Table "public.post_details" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+------------------------------------------ ... key | character varying | | | value | character varying | | |Se adicionarmos uma restrição NOT NULL ao banco de dados, ainda será possível que uma string vazia seja inserida, mas acho que ter NOT NULL tornará o sistema um pouco mais seguro.
Restrições de unicidade ausentes
-
TagGroup - name. Único no modelo (
app/models/tag_group.rb)validates_uniqueness_of :name, case_sensitive: falseMas o índice de unicidade está faltando no banco de dados
discourse_development=# \d tag_groups ... Indexes: "tag_groups_pkey" PRIMARY KEY, btree (id) -
Da mesma forma, WatchedWord - word. (
app/models/watched_word.rb)validates :word, presence: true, uniqueness: true, length: { maximum: 50 }O banco de dados possui um índice único em
(action, word), mas não em(word)sozinho:discourse_development=# \d watched_words ... Indexes: "watched_words_pkey" PRIMARY KEY, btree (id) "index_watched_words_on_action_and_word" UNIQUE, btree (action, word) -
Finalmente, WebHookEventType - name. (
app/models/web_hook_event_type.rb):validates :name, presence: true, uniqueness: trueRestrição de unicidade ausente no banco de dados:
discourse_development=# \d web_hook_event_types ... Indexes: "web_hook_event_types_pkey" PRIMARY KEY, btree (id)
Talvez alguém possa confirmar se essas observações parecem razoáveis. É possível que elas ajudem a prevenir um bug antes que ele aconteça. Além disso, se for o caso, a correção parece ser bastante direta, e ficarei feliz em criar um pull request se isso for útil.
Obrigado.