@@ -28,10 +28,9 @@ import qualified Data.Text.IO as Text
2828import Data.Time
2929
3030import qualified Database.PostgreSQL.Simple as SQL
31-
32- import qualified GHC.Generics as SQL
33-
34- import Text.Read (readMaybe )
31+ import qualified Database.PostgreSQL.Simple.Types as PG
32+ import Database.PostgreSQL.Simple.ToField (ToField (.. ))
33+ import Database.PostgreSQL.Simple.ToRow (ToRow (.. ))
3534
3635import VVA.Config
3736import VVA.Pool (ConnectionPool , withPool )
@@ -43,28 +42,39 @@ sqlFrom bs = fromString $ unpack $ Text.decodeUtf8 bs
4342listProposalsSql :: SQL. Query
4443listProposalsSql = sqlFrom $ (embedFile " sql/list-proposals.sql" )
4544
45+ newtype TextArray = TextArray [Text ]
46+
47+ instance ToRow TextArray where
48+ toRow (TextArray texts) = map toField texts
49+
4650listProposals ::
4751 (Has ConnectionPool r , Has VVAConfig r , MonadReader r m , MonadIO m , MonadFail m , MonadError AppError m ) =>
48- m [Proposal ]
49- listProposals = getProposals Nothing
52+ Maybe Text -> m [Proposal ]
53+ listProposals mSearch = getProposals ( fmap ( : [] ) mSearch)
5054
5155getProposal ::
5256 (Has ConnectionPool r , Has VVAConfig r , MonadReader r m , MonadIO m , MonadFail m , MonadError AppError m ) =>
5357 Text ->
5458 Integer ->
5559 m Proposal
5660getProposal txHash index = do
57- result <- getProposals (Just [txHash <> " #" <> pack (show index)])
61+ let proposalId = txHash <> " #" <> pack (show index)
62+ result <- getProposals (Just [proposalId])
5863 case result of
59- [] -> throwError $ NotFoundError (" Proposal with id: " <> txHash <> " # " <> pack ( show index) <> " not found" )
64+ [] -> throwError $ NotFoundError (" Proposal with id: " <> proposalId <> " not found" )
6065 [a] -> return a
61- _ -> throwError $ CriticalError (" Multiple proposal found for id: " <> txHash <> " # " <> pack ( show index) <> " . This should never happen" )
66+ _ -> throwError $ CriticalError (" Multiple proposals found for id: " <> proposalId <> " . This should never happen" )
6267
6368getProposals ::
6469 (Has ConnectionPool r , Has VVAConfig r , MonadReader r m , MonadIO m , MonadFail m , MonadError AppError m ) =>
65- Maybe [Text ] ->
66- m [Proposal ]
67- getProposals mProposalIds = withPool $ \ conn ->
68- liftIO $ case mProposalIds of
69- Nothing -> SQL. query @ (Bool , SQL. In [Text ]) conn listProposalsSql (False , SQL. In [] )
70- Just proposalIds -> SQL. query conn listProposalsSql (True , SQL. In proposalIds)
70+ Maybe [Text ] -> m [Proposal ]
71+ getProposals mSearchTerms = withPool $ \ conn -> do
72+ let searchParam = maybe " " head mSearchTerms
73+ liftIO $ SQL. query conn listProposalsSql
74+ ( searchParam
75+ , " %" <> searchParam <> " %"
76+ , " %" <> searchParam <> " %"
77+ , " %" <> searchParam <> " %"
78+ , " %" <> searchParam <> " %"
79+ , " %" <> searchParam <> " %"
80+ )
0 commit comments