constellation-hs/src/Routes.md

57 lines
1.1 KiB
Markdown
Raw Normal View History

2017-04-26 22:07:36 +00:00
Routes
======
The [addon partner API][addon-partner-api] defines the routes this application
must support.
Module Header
-------------
```haskell
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module Routes where
-- external dependencies
import Data.Proxy
import Network.Wai
import Network.Wai.Handler.Warp
import Servant
-- internal dependencies
import Heroku.Types as Heroku
import qualified Models
import qualified Types
```
URL Routing
-----------
```haskell
type Api = "heroku" :> "resources" :> ReqBody '[JSON] Heroku.Provider :> Post '[JSON] Types.App
api :: Proxy Api
api = Proxy
```
```
server :: Pool Postgresql -> Server Api
server pool =
provisionAppH
where
provisionAppH settings = liftIO $ provisionApp settings
provisionApp :: Heroku.Provider -> IO Types.App
provisionApp settings = runDbConn pool $ do
appKey <- insert $ Models.App (Heroku.heroku_id settings) (Heroku.region settings)
let showKey = show appKey
Types.App showKey
```
---
[addon-partner-api]: https://devcenter.heroku.com/articles/add-on-partner-api