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