kansoku-api-0.3.0.0: src/Kansoku/Api.hs
-- | Shared servant API type for the Kansoku service.
module Kansoku.Api
( KansokuAPI (..),
SchemaAPI,
kansokuAPI,
)
where
import Kansoku.Analysis.Api (Analyses)
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,
analyses :: mode :- NamedRoutes Analyses,
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