Switch to Postgres + snaplet arch compiles.
[?]
Jan 20, 2015, 5:56 PM
TNR3TEHKVADAEZSTOD2XLSUTSW5AWST2YUW4CWK5KE7DSC6XHZNACDependencies
- [2]
IZEVQF62Work in progress replacing sqlite with postgres. - [3]
64C6AWH6Rename Ananke -> Quixotic, project reboot. - [4]
EQXRXRZDChanged to use tasty instead of test-framework - [5]
TCOAKCGGCompleted conversion to snap. - [6]
LAROLAYUWIP - [7]
64VI73NPServer now compiles using abstracted SQLite - [8]
EMVTF2IWWIP moving back to snap. - [9]
RSEB2NFGReplacing Snap with Scotty. - [10]
W35DDBFYFactor common JSON conversions up into client lib module. - [11]
ADMKQQGCInitial empty Snap project. - [12]
TLQ72DSJLenses, sqlite-simple - [13]
7XN3I3QJAdd 'loggedIntervals' endpoint. - [14]
Z3M53KTLAdrift. - [15]
2Y2QZFVFSwitch to more modern cabal2nix-based workflow. - [*]
WO2MINIFAuctions now compile!
Change contents
- edit in lib/Quixotic/Database/PostgreSQL.hs at line 15
import Database.PostgreSQL.Simple.ToRow - replacement in lib/Quixotic/Database/PostgreSQL.hs at line 40
btcParser f v = fromField f vbtcParser f v = fromRational <$> fromField f v - edit in lib/Quixotic/Database/PostgreSQL.hs at line 63
qdbUserRowParser :: RowParser QDBUserqdbUserRowParser = QDBUser <$> fieldWith uidParser <*> userRowParser - replacement in lib/Quixotic/Database/PostgreSQL.hs at line 67
newtype PBTC = PBTC { pBTC :: BTC }newtype PBTC = PBTC BTC - edit in lib/Quixotic/Database/PostgreSQL.hs at line 90
newtype PQDBUser = PQDBUser { pQDBUser :: QDBUser }instance FromRow PQDBUser wherefromRow = PQDBUser <$> qdbUserRowParser - replacement in lib/Quixotic/Database/PostgreSQL.hs at line 149
createUser' user = docreateUser' user' = do - replacement in lib/Quixotic/Database/PostgreSQL.hs at line 153
(user ^. (username._UserName), user ^. (userAddress.address), user ^. userEmail)(user' ^. (username._UserName), user' ^. (userAddress.address), user' ^. userEmail) - replacement in lib/Quixotic/Database/PostgreSQL.hs at line 164
findUserByHandle' :: Handle -> ReaderT Connection IO (Maybe QDBUser)findUserByHandle' = undefinedfindUserByUserName' :: UserName -> ReaderT Connection IO (Maybe QDBUser)findUserByUserName' (UserName h) = doconn <- askusers <- lift $ query conn"SELECT id, handle, btc_addr, email FROM users WHERE handle = ?"(Only h)pure . fmap pQDBUser $ headMay users - edit in lib/Quixotic/Database/PostgreSQL.hs at line 172
- replacement in lib/Quixotic/Database/PostgreSQL.hs at line 183
, findUserByHandle = findUserByHandle', findUserByUserName = findUserByUserName' - replacement in lib/Quixotic/Database/SQLite.hs at line 132
, findUserByHandle = \_ -> pure Nothing, findUserByUserName = \_ -> pure Nothing - replacement in lib/Quixotic/Database.hs at line 27
, findUserByHandle :: Handle -> m (Maybe QDBUser), findUserByUserName :: UserName -> m (Maybe QDBUser) - edit in quixotic.cabal at line 27[3.751][17.1584]
Quixotic.Users - replacement in server/Main.hs at line 1
{-# LANGUAGE ScopedTypeVariables, OverloadedStrings, NoImplicitPrelude #-}{-# LANGUAGE RecordWildCards, TemplateHaskell #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE NoImplicitPrelude #-}{-# LANGUAGE RecordWildCards #-}{-# LANGUAGE FlexibleInstances #-}{-# LANGUAGE TemplateHaskell #-} - replacement in server/Main.hs at line 13[3.643]→[2.7549:7572](∅→∅),[3.643]→[3.191:225](∅→∅),[2.7572]→[3.191:225](∅→∅),[3.191]→[3.191:225](∅→∅),[3.225]→[3.2406:2439](∅→∅),[3.2406]→[3.2406:2439](∅→∅)
import Control.Lens.THimport Control.Monad.Trans.Readerimport qualified Data.Aeson as Aimport Control.Monad.Readerimport Control.Monad.State - edit in server/Main.hs at line 17
import Data.Mapimport Data.Pool - edit in server/Main.hs at line 22
import Quixotic.Json - edit in server/Main.hs at line 23
import Quixotic.Users - replacement in server/Main.hs at line 29
import Snap.Snaplet.Authimport Snap.Snaplet.PostgresqlSimpleimport qualified Snap.Snaplet.Auth as AU - edit in server/Main.hs at line 32
import Snap.Snaplet.PostgresqlSimple - replacement in server/Main.hs at line 51
, _auth :: Snaplet (AuthManager App), _auth :: Snaplet (AU.AuthManager App) - edit in server/Main.hs at line 55
instance HasPostgres (Handler b App) wheregetPostgresState = with db getsetLocalPostgresState s = local (set (db . snapletValue) s) - edit in server/Main.hs at line 110
requireLogin :: Handler App App a -> Handler App App arequireLogin = AU.requireUser auth (redirect "/login")requireUserId :: (UserId -> Handler App App a) -> Handler App App arequireUserId hf = AU.requireUser auth (redirect "/login") $ doQDB{..} <- with qdb getauthedUser <- with auth AU.currentUserqdbUser <- case UserName . AU.unUid <$> (AU.userId =<< authedUser) ofNothing -> snapError 403 "User is authenticated, but session lacks user identifier"Just n -> liftPG . runReaderT $ findUserByUserName ncase qdbUser ofNothing -> snapError 403 "Unable to retrieve user record for authenticated user"Just u -> hf (u ^. userId) - replacement in server/Main.hs at line 125
logWorkHandler evType = doQDB{..} <- with qdb memptypg <- with db getPostgresStateauthedUser <- with auth currentUserqUid <-logWorkHandler evType = requireUserId $ \uid -> doQDB{..} <- with qdb get - replacement in server/Main.hs at line 130
btcAddr = fmap decodeUtf8 addrBytes >>= parseBtcAddrstoreEv uid addr = runReaderT . recordEvent uid $ LogEntry addr workEventmaybe (snapError 400 "") (liftPG . storeEv) btcAddrstoreEv addr = runReaderT . recordEvent uid $ LogEntry addr workEventcase fmap decodeUtf8 addrBytes >>= parseBtcAddr ofNothing -> snapError 400 $ "Unable to parse bitcoin address from " <> (tshow addrBytes)Just addr -> liftPG $ storeEv addr - replacement in server/Main.hs at line 151
snapError :: Int -> Text -> Snap ()snapError :: MonadSnap m => Int -> Text -> m a