57 lines
1.1 KiB
Markdown
57 lines
1.1 KiB
Markdown
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
|