| |
|
| (ns metabase.revisions.events
(:require
[metabase.api.common :as api]
[metabase.events :as events]
[metabase.revisions.models.revision :as revision]
[metabase.util.log :as log]
[methodical.core :as methodical]
[toucan2.core :as t2])) |
|
| (derive ::event :metabase/event) |
|
| (defn- push-revision!
[model
{:keys [user-id] object :object :as event}
{:keys [is-creation?]
:or {is-creation? false}
:as _options}]
(when event
(try
(when-not (t2/instance-of? model object)
(throw (ex-info "object must be a model instance" {:object object :model model})))
(let [user-id (or user-id api/*current-user-id*)]
(revision/push-revision! {:entity model
:id (:id object)
:object object
:user-id user-id
:is-creation? is-creation?
:message (:revision-message event)}))
(catch Throwable e
(log/warnf e "Failed to process revision event for model %s" model))))) |
|
| (derive ::card-event ::event)
(derive :event/card-create ::card-event)
(derive :event/card-update ::card-event) |
|
| (methodical/defmethod events/publish-event! ::card-event
[topic event]
(push-revision! :model/Card event {:is-creation? (= topic :event/card-create)})) |
|
| (derive ::dashboard-event ::event)
(derive :event/dashboard-create ::dashboard-event)
(derive :event/dashboard-update ::dashboard-event) |
|
| (methodical/defmethod events/publish-event! ::dashboard-event
[topic event]
(push-revision! :model/Dashboard event {:is-creation? (= topic :event/dashboard-create)})) |
|
| (derive ::metric-event ::event)
(derive :event/metric-create ::metric-event)
(derive :event/metric-update ::metric-event)
(derive :event/metric-delete ::metric-event) |
|
| (methodical/defmethod events/publish-event! ::metric-event
[topic event]
(push-revision! :model/LegacyMetric event {:is-creation? (= topic :event/metric-create)})) |
|
| (derive ::segment-event ::event)
(derive :event/segment-create ::segment-event)
(derive :event/segment-update ::segment-event)
(derive :event/segment-delete ::segment-event) |
|
| (methodical/defmethod events/publish-event! ::segment-event
[topic event]
(push-revision! :model/Segment event {:is-creation? (= topic :event/segment-create)})) |
| | |