diff options
author | Ben Sima <ben@bsima.me> | 2018-01-22 22:09:31 -0800 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2018-01-22 22:09:31 -0800 |
commit | 273a70e84ba78e1638027be806e06e233d44e0c1 (patch) | |
tree | 6768b6eb334451466417a18a83bb3de952a43319 /main.hs |
Init basic functionality
Diffstat (limited to 'main.hs')
-rwxr-xr-x | main.hs | 70 |
1 files changed, 70 insertions, 0 deletions
@@ -0,0 +1,70 @@ +#!/usr/bin/env stack +{- stack + --nix + --resolver lts-10.3 + --install-ghc + script + --package http-types + --package yesod + --package yesod-core + --package text + --package aeson +-} + +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE ScopedTypeVariables #-} + +import GHC.Generics +import Control.Monad +import Data.Maybe (isJust) +import Data.Text (Text, unpack) +import Yesod +import Network.HTTP.Types.Status (status400, status200) +import Data.Aeson + +data App = App + +mkYesod "App" [parseRoutes| +/query QueryR GET +/number NumberR POST +|] + +-- | Start a simple warp server on 3000 +main :: IO () +main = warp 3000 App + +-- | Initiate Yesod. The default method instances are fine for a prototype or +-- demo app. +instance Yesod App + +-- | A type to describe the shape of our core model +data Caller = Caller + { name :: Text + , number :: Text + , context :: Text + } + deriving (Show, Eq, Generic, ToJSON, FromJSON) + +-- FIXME +findByNumber = id + +getQueryR :: Handler RepJson +getQueryR = do + qm <- lookupGetParam "number" + case qm of + Nothing -> notFound + Just q -> + sendStatusJSON status200 $ object [ "msg" .= ("FIXME" :: Text) ] + + +postNumberR :: Handler RepJson +postNumberR = do + (obj :: Result Value) <- parseJsonBody + case obj of + Error err -> sendStatusJSON status400 $ object [ "msg" .= ("invalid body" :: Text) ] + Success v -> sendStatusJSON status200 $ object [ "msg" .= ("FIXME" :: Text) ] |