          (every? integer? cards)
          (coll? channels)
          (every? map? channels)]}
-  ;; TODO: ideally this would all be in a transaction
-  (db/upd Pulse id :name name)
-  (update-pulse-cards pulse cards)
-  (update-pulse-channels pulse channels)
-  (db/sel :one Pulse :id id))
+  (kdb/transaction
+    (db/upd Pulse id :name name)
+    (update-pulse-cards pulse cards)
+    (update-pulse-channels pulse channels)
+    (db/sel :one Pulse :id id)))
 
 (defn create-pulse
   "Create a new `Pulse` by inserting it into the database along with all associated pieces of data such as:


;; ## Helper Functions

(defn update-pulse-cards
  "Update the `PulseCards` for a given PULSE.
   CARD-IDS should be a definitive collection of *all* IDs of cards for the pulse in the desired order.


      ;; 4. NOT in channels, NOT in db-channels = NO-OP
      :else nil)))

(defn- update-pulse-channels
  "Update the `PulseChannels` for a given PULSE.
   CHANNELS should be a definitive collection of *all* of the channels for the the pulse.

