module Web.Controller.Api.V2.OutcomeSignals where import Web.Types import Generated.Types import IHP.Prelude import IHP.ControllerPrelude import Data.Aeson (object, (.=)) import Web.Controller.Api.V2.Auth (requireApiConsumer, paginatedResponse, getPageParams) instance Controller ApiV2OutcomeSignalsController where action ApiV2IndexOutcomeSignalsAction = do _consumer <- requireApiConsumer (page, perPage) <- getPageParams let off = (page - 1) * perPage total <- query @OutcomeSignal |> fetchCount sigs <- query @OutcomeSignal |> orderByDesc #observedAt |> limit perPage |> offset off |> fetch renderJson $ paginatedResponse (map sigToJson sigs) page perPage total action ApiV2ShowOutcomeSignalAction { outcomeSignalId } = do _consumer <- requireApiConsumer sig <- fetch outcomeSignalId renderJson (sigToJson sig) sigToJson :: OutcomeSignal -> Value sigToJson s = object [ "id" .= s.id , "widgetId" .= s.widgetId , "deploymentId" .= s.deploymentId , "signalType" .= s.signalType , "value" .= s.value , "observedAt" .= s.observedAt ]