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