Я пытаюсь нормализовать свою голову и думаю, что я продвигаюсь вперед, но я снова споткнулся и не уверен, что я просто неправильно думаю о проблеме. Как нормализовать сообщения текущего пользователя?Нормализация и идентификаторы в Ом/Следующая
(def init-data
{:session {:user/id 1
:messages [{:message/id 1}]}
:messages [{:message/id 1 :text "Message 1"}
{:message/id 2 :text "Message 1"}]
:users [{:user/id 1 :email "[email protected]"}
{:user/id 2 :email "[email protected]"}]})
(defui Message
static om/Ident
(ident [this {:keys [message/id]}]
[:message/by-id id])
static om/IQuery
(query [this]
[:id]))
(defui User
static om/Ident
(ident [this {:keys [user/id]}]
[:user/by-id id])
static om/IQuery
(query [this]
`[:id {:properties ~(om/get-query Property)}]))
(defui Session
static om/Ident
(ident [this {:keys [user/id]}]
[:user/by-id id])
static om/IQuery
(query [this]
[:id]))
(defui RootView
static om/IQuery
(query [this]
(let [message-query (om/get-query Message)
user-query (om/get-query User)
session-query (om/get-query Session)]
`[{:messages ~message-query}
{:users ~user-query}
{:session ~session-query}])))
=> (def norm-data (om/tree->db RootView init-data true))
=> (pp/pprint norm-data)
{:session [:user/by-id 1],
:messages [[:message/by-id 1] [:message/by-id 2]],
:users [[:user/by-id 1] [:user/by-id 2]],
:message/by-id
{1 {:message/id 1, :text "Message 1"},
2 {:message/id 2, :text "Message 1"}},
:user/by-id
{1 {:user/id 1, :email "[email protected]", :messages [{:message/id 1}]},
2 {:user/id 2, :email "[email protected]"}},
:om.next/tables #{:message/by-id :user/by-id}}
Я написал функцию под названием 'check', которая проверяет, был ли установлен формат по умолчанию-db. Я мог бы запустить его с вашим примером, но мне нужны «init-data». Можете ли вы поместить 'init-data' в суть или что-то еще? Я могу посмотреть на это завтра (поздно здесь). –
Извините, Крис - забыли эту часть! Сейчас в этом вопросе (здесь и во всей его славе, как в сущности: https://gist.github.com/addywaddy/2b2ecf4ca389afb0d202). –
Я вижу из состояния, что у пользователя есть электронное письмо и сообщение имеет текст. Я ожидаю, что компоненты будут отражать это, т.е. пользовательский компонент, чтобы иметь: электронную почту в запросе. Вместо этого я вижу ссылку на компонент Property, которого нет в вашем вопросе (как компонент или состояние). –