packages feed

kansoku-api-0.2.0.0: src/Kansoku/Api.hs

-- | Shared servant API type for the Kansoku service.
module Kansoku.Api
  ( KansokuAPI (..),
    SchemaAPI,
    kansokuAPI,
  )
where

import Kansoku.Cohort.Api (Cohorts)
import Kansoku.Event.Contract (SchemaCatalog)
import Kansoku.Ingest.Api (IngestRoutes)
import Kansoku.Metrics.Api (MetricsRoutes)
import Kansoku.Metrics.DefinitionApi (MetricDefinitions)
import Kansoku.Prelude
import Kansoku.Users.Api (Users)
import Servant.API (Description, Get, JSON, NamedRoutes, type (:>))
import Servant.API.Generic (type (:-))

-- | The analytics contract served and documented by Kansoku.
data KansokuAPI mode = KansokuAPI
  { ingest :: mode :- NamedRoutes IngestRoutes,
    metrics :: mode :- NamedRoutes MetricsRoutes,
    metricDefinitions :: mode :- NamedRoutes MetricDefinitions,
    users :: mode :- NamedRoutes Users,
    cohorts :: mode :- NamedRoutes Cohorts,
    schemas :: mode :- SchemaAPI
  }
  deriving stock (Generic)

kansokuAPI :: Proxy (NamedRoutes KansokuAPI)
kansokuAPI = Proxy

type SchemaAPI =
  "v1"
    :> "schemas"
    :> Description "Public event schema catalog. The same contract is committed at docs/contracts/events.json."
    :> Get '[JSON] SchemaCatalog