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
|