module Web.Controller.ApiConsumers where import Web.Types import Web.View.ApiConsumers.Index import Web.View.ApiConsumers.Show import Web.View.ApiConsumers.New import Web.View.ApiConsumers.Edit import Generated.Types import IHP.Prelude import IHP.ControllerPrelude instance Controller ApiConsumersController where beforeAction = ensureIsUser action ApiConsumersAction = autoRefresh do consumers <- query @ApiConsumer |> orderByDesc #createdAt |> fetch render IndexView { consumers } action ShowApiConsumerAction { apiConsumerId } = do consumer <- fetch apiConsumerId apiKeys <- query @ApiKey |> filterWhere (#apiConsumerId, consumer.id) |> orderByDesc #createdAt |> fetch webhooks <- query @WebhookSubscription |> filterWhere (#apiConsumerId, consumer.id) |> orderByAsc #eventType |> fetch mManifest <- case consumer.hubCapabilityManifestId of Nothing -> pure Nothing Just mId -> Just <$> fetch mId render ShowView { consumer, apiKeys, webhooks, mManifest } action NewApiConsumerAction = do let consumer = newRecord @ApiConsumer manifests <- query @HubCapabilityManifest |> filterWhere (#status, "active") |> orderByAsc #createdAt |> fetch render NewView { consumer, manifests } action CreateApiConsumerAction = do let consumer = newRecord @ApiConsumer consumer |> fill @["name", "description", "rateLimitPerMinute", "quotaPerDay"] |> ifValid \case Left consumerWithErrors -> do manifests <- query @HubCapabilityManifest |> filterWhere (#status, "active") |> fetch render NewView { consumer = consumerWithErrors, manifests } Right validConsumer -> do let mManifestId = paramOrNothing @(Id HubCapabilityManifest) "hubCapabilityManifestId" validConsumer |> set #hubCapabilityManifestId mManifestId |> createRecord redirectTo ApiConsumersAction action EditApiConsumerAction { apiConsumerId } = do consumer <- fetch apiConsumerId manifests <- query @HubCapabilityManifest |> filterWhere (#status, "active") |> fetch render EditView { consumer, manifests } action UpdateApiConsumerAction { apiConsumerId } = do consumer <- fetch apiConsumerId consumer |> fill @["name", "description", "rateLimitPerMinute", "quotaPerDay"] |> ifValid \case Left consumerWithErrors -> do manifests <- query @HubCapabilityManifest |> filterWhere (#status, "active") |> fetch render EditView { consumer = consumerWithErrors, manifests } Right validConsumer -> do let mManifestId = paramOrNothing @(Id HubCapabilityManifest) "hubCapabilityManifestId" validConsumer |> set #hubCapabilityManifestId mManifestId |> updateRecord redirectTo (ShowApiConsumerAction apiConsumerId) action DeactivateApiConsumerAction { apiConsumerId } = do consumer <- fetch apiConsumerId consumer |> set #isActive False |> updateRecord redirectTo ApiConsumersAction