Skip to content
Snippets Groups Projects
Commit 1e718837 authored by Allen Gilliland's avatar Allen Gilliland
Browse files

finish off card activity handling by adding in ability to track the database &...

finish off card activity handling by adding in ability to track the database & table associated with an activity item.
parent dd30e8da
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,20 @@ databaseChangeLog:
type: varchar(32)
constraints:
nullable: false
- column:
name: timestamp
type: DATETIME
constraints:
nullable: false
- column:
name: user_id
type: int
constraints:
nullable: true
references: core_user(id)
foreignKeyName: fk_activity_ref_user_id
deferrable: false
initiallyDeferred: false
- column:
name: model
type: varchar(16)
......@@ -29,19 +43,15 @@ databaseChangeLog:
constraints:
nullable: true
- column:
name: user_id
name: database_id
type: int
constraints:
nullable: true
references: core_user(id)
foreignKeyName: fk_activity_ref_user_id
deferrable: false
initiallyDeferred: false
- column:
name: timestamp
type: DATETIME
name: table_id
type: int
constraints:
nullable: false
nullable: true
- column:
name: custom_id
type: varchar(48)
......@@ -54,18 +64,22 @@ databaseChangeLog:
nullable: false
- createIndex:
tableName: activity
indexName: idx_activity_topic
indexName: idx_activity_timestamp
columns:
column:
name: topic
name: timestamp
- createIndex:
tableName: activity
indexName: idx_activity_model_model_id
indexName: idx_activity_user_id
columns:
column:
name: model
name: user_id
- createIndex:
tableName: activity
indexName: idx_activity_custom_id
columns:
column:
name: model_id
name: custom_id
- modifySql:
dbms: postgresql
replace:
......
......@@ -95,15 +95,16 @@
:name name
:public_perms public_perms
:visualization_settings visualization_settings)
(events/publish-event :card-update {:id id :actor_id *current-user-id*})
(events/publish-event :card-update (assoc (sel :one Card :id id) :actor_id *current-user-id*))
(push-revision :entity Card, :object (Card id)))
(defendpoint DELETE "/:id"
"Delete a `Card`."
[id]
(write-check Card id)
(let [result (cascade-delete Card :id id)]
(events/publish-event :card-delete {:id id :actor_id *current-user-id*})
(let [card (sel :one Card :id id)
result (cascade-delete Card :id id)]
(events/publish-event :card-delete (assoc card :actor_id *current-user-id*))
result))
(defendpoint GET "/:id/favorite"
......
......@@ -108,29 +108,38 @@
(defn- record-activity
"Simple base function for recording activity using defaults.
Allows caller to specify a custom serialization function to apply to `object` to generate the activity `:details`."
([topic object serialize-fn]
(ins Activity
:topic topic
:model (topic->model topic)
:model_id (object->model-id topic object)
:custom_id (:custom_id object)
:user_id (object->user-id object)
:details (if (fn? serialize-fn)
(serialize-fn object)
object)))
([topic object details-fn database-table-fn]
(let [{:keys [table-id database-id]} (when (fn? database-table-fn)
(database-table-fn object))]
(ins Activity
:topic topic
:user_id (object->user-id object)
:model (topic->model topic)
:model_id (object->model-id topic object)
:database_id database-id
:table_id table-id
:custom_id (:custom_id object)
:details (if (fn? details-fn)
(details-fn object)
object))))
([topic object details-fn]
(record-activity topic object details-fn nil))
([topic object]
(record-activity topic object nil)))
(record-activity topic object nil)))
(defn- process-card-activity
""
[])
(defn- process-card-activity [topic object]
(let [details-fn #(select-keys % [:name :description :public_perms])
database-table-fn (fn [obj]
{:database-id (get-in obj [:dataset_query :database])
:table-id (get-in obj [:dataset_query :query :source_table])})]
(record-activity topic object details-fn database-table-fn)))
(defn- process-dashboard-activity [topic object]
(let [create-delete-details #(select-keys % [:description :name :public_perms])
add-remove-card-details (fn [{:keys [dashcards] :as obj}]
;; we expect that the object has just a dashboard :id at the top level
;; plus a `:dashcards` attribute which is a vector of the cards added/removed
(-> (sel :one Dashboard :id (:id obj))
(-> (sel :one Dashboard :id (object->model-id topic obj))
(select-keys [:description :name :public_perms])
(assoc :dashcards (for [{:keys [id card_id card]} dashcards]
(-> @card
......@@ -145,9 +154,9 @@
(defn- process-database-activity [topic object]
(case topic
:database-sync-begin (record-activity topic object (fn [obj] (-> obj
(assoc :status "started")
(dissoc :database_id :custom_id))))
:database-sync-begin (record-activity :database-sync object (fn [obj] (-> obj
(assoc :status "started")
(dissoc :database_id :custom_id))))
:database-sync-end (let [{activity-id :id} (sel :one Activity :custom_id (:custom_id object))]
(upd Activity activity-id
:details (-> object
......@@ -172,7 +181,7 @@
(log/info "Activity:" topic)
(clojure.pprint/pprint object)
(case (topic->model topic)
"card" (process-card-activity)
"card" (process-card-activity topic object)
"dashboard" (process-dashboard-activity topic object)
"database" (process-database-activity topic object)
"install" (when-not (sel :one :fields [Activity :id])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment