Adding serveJSON combinator to eliminate some boilerplate from handlers.
[?]
Mar 17, 2015, 11:42 PM
XTBSG4C7SCZUFOU2BTNFR6B6TCGYI35BWUV4PVTS3N7KNH5VEARQCDependencies
- [2]
EZQG2APBUpdate task list. - [3]
W35DDBFYFactor common JSON conversions up into client lib module. - [4]
PBD7LZYQPostgres & auth are beginning to function. - [5]
BROSTG5KBeginning of modularization of server. - [6]
4IQVQL4TAdded client for payouts endpoint. - [7]
LD4GLVSFMore database stuff. - [8]
Z7KS5XHHVery WIP. Wow. - [9]
IZEVQF62Work in progress replacing sqlite with postgres. - [10]
I2KHGVD4Require project permissions for access to most data. - [11]
2G3GNDDUEvent logging is now functioning in postgres. - [*]
ADMKQQGCInitial empty Snap project. - [*]
2Y2QZFVFSwitch to more modern cabal2nix-based workflow. - [*]
64C6AWH6Rename Ananke -> Quixotic, project reboot.
Change contents
- edit in lib/Quixotic/Database/PostgreSQL.hs at line 217
- replacement in lib/Quixotic/Json.hs at line 9
import Data.Mapimport qualified Data.Map as M - replacement in lib/Quixotic/Json.hs at line 20
toJSON $ mapKeys (^. _BtcAddr) ptoJSON $ M.mapKeys (^. _BtcAddr) p - replacement in lib/Quixotic/Json.hs at line 24
PayoutsJ . mapKeys BtcAddr <$> parseJSON vPayoutsJ . M.mapKeys BtcAddr <$> parseJSON v - edit in lib/Quixotic/Json.hs at line 37
newtype ProjectJ = ProjectJ ProjectmakePrisms ''ProjectJinstance ToJSON ProjectJ wheretoJSON (ProjectJ p) =object [ "projectName" .= (p ^. projectName), "inceptionDate" .= (p ^. inceptionDate), "initiator" .= (p ^. (initiator._UserId)) ] - edit in lib/Quixotic/Json.hs at line 47
newtype WidxJ = WidxJ WorkIndexmakePrisms ''WidxJ - edit in lib/Quixotic/Json.hs at line 50[3.2561]
instance ToJSON WidxJ wheretoJSON (WidxJ widx) =toJSON $ (fmap IntervalJ) <$> (M.mapKeysWith (++) (^._BtcAddr) widx) - edit in server/Main.hs at line 10
import qualified Data.Aeson as A - edit in server/Main.hs at line 13[15.2567][3.942]
import Quixotic.Json - replacement in server/Main.hs at line 57[3.1105]→[3.1105:1196](∅→∅),[3.1196]→[3.1826:1879](∅→∅),[3.3862]→[3.1826:1879](∅→∅),[3.1879]→[3.1197:1396](∅→∅)
, ("projects/:projectId/log/:btcAddr", method GET loggedIntervalsHandler), ("projects/:projectId", method GET ok), ("projects", void $ method POST projectCreateHandler), ("projects", void $ method GET projectListHandler), ("payouts/:projectId", method GET payoutsHandler), ("projects/:projectId/log/:btcAddr", serveJSON WidxJ $ method GET loggedIntervalsHandler), ("projects/:projectId", serveJSON ProjectJ $ method GET projectGetHandler), ("projects", void $ method POST projectCreateHandler), ("projects", serveJSON (fmap (ProjectJ._project)) $ method GET projectListHandler), ("payouts/:projectId", serveJSON PayoutsJ $ method GET payoutsHandler) - edit in server/Main.hs at line 90[14.1197]
serveJSON :: (MonadSnap m, A.ToJSON a) => (b -> a) -> m b -> m ()serveJSON f ma = domodifyResponse $ addHeader "content-type" "application/json"writeLBS =<< (A.encode . f <$> ma) - edit in server/Quixotic/Snaplet/Projects.hs at line 24
projectGetHandler :: Handler App App ProjectprojectGetHandler = ok - replacement in server/Quixotic/Snaplet/Projects.hs at line 37
projectListHandler :: Handler App App [Project]projectListHandler = ok[3.3443]projectListHandler :: Handler App App [QDBProject]projectListHandler = doQDB{..} <- view qdb <$> with qm getuid <- requireUserIdliftPG . runReaderT $ findUserProjects uid - edit in server/Quixotic/Snaplet/WorkLog.hs at line 8
import qualified Data.Map as M - edit in server/Quixotic/Snaplet/WorkLog.hs at line 11
import Quixotic.Json - replacement in server/Quixotic/Snaplet/WorkLog.hs at line 35
loggedIntervalsHandler :: Handler App App ()loggedIntervalsHandler :: Handler App App WorkIndex - replacement in server/Quixotic/Snaplet/WorkLog.hs at line 40[3.3515]→[3.3515:3565](∅→∅),[3.3565]→[3.6518:6581](∅→∅),[3.6518]→[3.6518:6581](∅→∅),[3.6581]→[2.4461:4546](∅→∅)
widx <- liftPG . runReaderT $ readWorkIndex pidmodifyResponse $ addHeader "content-type" "application/json"writeLBS . A.encode . fmap (fmap IntervalJ) $ M.mapKeysWith (++) (^._BtcAddr) widxliftPG . runReaderT $ readWorkIndex pid - replacement in server/Quixotic/Snaplet/WorkLog.hs at line 42
payoutsHandler :: Handler App App ()payoutsHandler :: Handler App App Payouts - replacement in server/Quixotic/Snaplet/WorkLog.hs at line 49
modifyResponse $ addHeader "content-type" "application/json"writeLBS . A.encode . PayoutsJ $ payouts df ptime widxpure $ payouts df ptime widx