about summary refs log blame commit diff
path: root/src/API.hs
blob: b2c7fd57d67f48fae3dced7b966d5bfaf25504f5 (plain) (tree)






































                                                                                
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
--------------------------------------------------------------------------------
module API where
--------------------------------------------------------------------------------
import qualified Data.Pool as DP
import qualified Database.SQLite.Simple as DB

import Data.Aeson
import GHC.Generics
import GHC.TypeLits
import Network.Wai.Handler.Warp
import Servant
import Control.Monad.IO.Class
--------------------------------------------------------------------------------

handlers :: DP.Pool DB.Connection -> Server API
handlers pool = do
  getHandler pool :<|> pure 0

getHandler :: DP.Pool DB.Connection -> Handler Int
getHandler pool =
  DP.withResource pool $ \conn -> do
     result <- liftIO $ DB.query_ conn "select 2 + 2"
     case result of
       [DB.Only x] -> pure x
       _  -> pure (-1)

type API = "number" :> Get '[JSON] Int
      :<|> "other" :> Post '[JSON] Int

main :: IO ()
main = do
  pool <- DP.createPool (DB.open "data.db") DB.close 1 0.5 1
  run 3000 (serve (Proxy @ API) (handlers pool))