{-# LANGUAGE BlockArguments #-} {-# LANGUAGE QuasiQuotes #-} module Server.Frontend.Tracker (getTrackerViewR) where import Data.Coerce (coerce) import Data.Functor ((<&>)) import Data.Text (Text) import qualified Data.Text as T import Data.Time (getCurrentTime) import qualified Data.UUID as UUID import Database.Esqueleto.Experimental hiding ((<&>)) import Persist import Server.Frontend.Routes (FrontendMessage (..), Handler, Route (..), Widget) import Yesod hiding (update, (=.), (==.)) import OwnTracks.Status getTrackerViewR :: Text -> Handler Html getTrackerViewR name = runDB (selectOne do tracker <- from (table @Tracker) where_ (tracker ^. TrackerName ==. val name) pure tracker) >>= \case Nothing -> notFound Just (Entity trackerId Tracker{..}) -> do (maybeStatus, maybePing) <- runDB $ do status <- selectOne do status <- from (table @TrackerStatus) where_ (status ^. TrackerStatusTracker ==. val trackerId) orderBy [desc $ status ^. TrackerStatusTimestamp] pure status ping <- selectOne do ping <- from (table @Ping) where_ (ping ^. PingTrackerId ==. val trackerId) orderBy [desc $ ping ^. PingTimestamp] pure ping pure (status, ping) -- TODO: leaflet map; auto updates? defaultLayout [whamlet|