constellation-hs/src/Routes.md

1.1 KiB

Routes

The addon partner API defines the routes this application must support.

Module Header

{-# 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

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