module Web.Controller.Api.V2.Widgets where import Web.Types import Generated.Types import IHP.Prelude import IHP.ControllerPrelude import Data.Aeson (object, (.=), ToJSON, toJSON) import Web.Controller.Api.V2.Auth (requireApiConsumer, paginatedResponse, getPageParams) instance Controller ApiV2WidgetsController where action ApiV2IndexWidgetsAction = do _consumer <- requireApiConsumer (page, perPage) <- getPageParams let pageOffset = (page - 1) * perPage total <- query @Widget |> fetchCount widgets <- query @Widget |> orderByDesc #createdAt |> limit perPage |> offset pageOffset |> fetch renderJson $ paginatedResponse (map widgetToJson widgets) page perPage total action ApiV2ShowWidgetAction { widgetId } = do _consumer <- requireApiConsumer widget <- fetch widgetId renderJson (widgetToJson widget) widgetToJson :: Widget -> Value widgetToJson w = object [ "id" .= w.id , "hubId" .= w.hubId , "name" .= w.name , "widgetType" .= w.widgetType , "capabilityRef" .= w.capabilityRef , "viewContext" .= w.viewContext , "policyScope" .= w.policyScope , "status" .= w.status , "version" .= w.version , "createdAt" .= w.createdAt ]