(ns metabase.events.last-login
  (:require
   [metabase.events :as events]
   [metabase.util.log :as log]
   [methodical.core :as methodical]
   [toucan2.core :as t2]))
(derive ::event :metabase/event)
(derive :event/user-login ::event)
(methodical/defmethod events/publish-event! ::event
  [topic {:keys [user-id] :as _event}]
  ;; try/catch here to prevent individual topic processing exceptions from bubbling up.  better to handle them here.
  (when user-id
    (try
      ;; just make a simple attempt to set the `:last_login` for the given user to now
      (t2/update! :model/User user-id {:last_login :%now})
      (catch Throwable e
        ;; TODO -- huh? Terrible log message.
        (log/warnf e "Failed to process sync-database event. %s" topic)))))