From acaa2139aecbd1fcafb933960cb0c3d987e6f572 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello <12953208+elvece@users.noreply.github.com> Date: Wed, 8 Sep 2021 15:39:29 -0600 Subject: [PATCH] alter category to optional --- src/Database/Marketplace.hs | 6 +++--- src/Handler/Marketplace.hs | 6 +++--- src/Lib/Types/Category.hs | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/Database/Marketplace.hs b/src/Database/Marketplace.hs index 452cdd7..680446e 100644 --- a/src/Database/Marketplace.hs +++ b/src/Database/Marketplace.hs @@ -13,8 +13,8 @@ import Data.HashMap.Strict import Data.Version import Data.Aeson -searchServices :: MonadIO m => CategoryTitle -> Int64 -> Int64 -> Text -> ReaderT SqlBackend m [P.Entity SApp] -searchServices ANY pageItems offset' query = select $ do +searchServices :: MonadIO m => Maybe CategoryTitle -> Int64 -> Int64 -> Text -> ReaderT SqlBackend m [P.Entity SApp] +searchServices Nothing pageItems offset' query = select $ do service <- from $ table @SApp where_ ((service ^. SAppDescShort `ilike` (%) ++. val query ++. (%)) ||. (service ^. SAppDescLong `ilike` (%) ++. val query ++. (%)) @@ -24,7 +24,7 @@ searchServices ANY pageItems offset' query = select $ do limit pageItems offset offset' pure service -searchServices category pageItems offset' query = select $ do +searchServices (Just category) pageItems offset' query = select $ do services <- from (do (service :& sc) <- diff --git a/src/Handler/Marketplace.hs b/src/Handler/Marketplace.hs index f0509b5..0f4f996 100644 --- a/src/Handler/Marketplace.hs +++ b/src/Handler/Marketplace.hs @@ -142,7 +142,7 @@ data ServiceListDefaults = ServiceListDefaults { serviceListOrder :: OrderArrangement , serviceListPageLimit :: Int64 -- the number of items per page , serviceListPageNumber :: Int64 -- the page you are on - , serviceListCategory :: CategoryTitle + , serviceListCategory :: Maybe CategoryTitle , serviceListQuery :: Text } deriving (Eq, Show, Read) @@ -224,7 +224,7 @@ getPackageListR = do { serviceListOrder = DESC , serviceListPageLimit = 20 , serviceListPageNumber = 1 - , serviceListCategory = ANY + , serviceListCategory = Nothing , serviceListQuery = "" } case lookup "ids" getParameters of @@ -236,7 +236,7 @@ getPackageListR = do Nothing -> do $logInfo c sendResponseStatus status400 ("could not read category" :: Text) - Just t -> pure t + Just t -> pure $ Just t page <- case lookup "page" getParameters of Nothing -> pure $ serviceListPageNumber defaults Just p -> case readMaybe p of diff --git a/src/Lib/Types/Category.hs b/src/Lib/Types/Category.hs index 711df5e..a49fac4 100644 --- a/src/Lib/Types/Category.hs +++ b/src/Lib/Types/Category.hs @@ -8,15 +8,14 @@ import Database.Persist.Postgresql import Data.Aeson import Control.Monad import Yesod.Core -import qualified Data.Text as T + data CategoryTitle = FEATURED | BITCOIN | LIGHTNING | DATA | MESSAGING | SOCIAL - | NONE - | ANY + | ALTCOIN deriving (Eq, Enum, Show, Read) instance PersistField CategoryTitle where fromPersistValue = fromPersistValueJSON @@ -24,7 +23,15 @@ instance PersistField CategoryTitle where instance PersistFieldSql CategoryTitle where sqlType _ = SqlString instance ToJSON CategoryTitle where - toJSON = String . T.toLower . show + -- toJSON = String . T.toLower . show + toJSON = \case + FEATURED -> "featured" + BITCOIN -> "bitcoin" + LIGHTNING -> "lightning" + DATA -> "data" + MESSAGING -> "messaging" + SOCIAL -> "social" + ALTCOIN -> "alt coin" instance FromJSON CategoryTitle where parseJSON = withText "CategoryTitle" $ \case "featured" -> pure FEATURED @@ -33,8 +40,7 @@ instance FromJSON CategoryTitle where "data" -> pure DATA "messaging" -> pure MESSAGING "social" -> pure SOCIAL - "none" -> pure NONE - "any" -> pure ANY + "alt coin" -> pure ALTCOIN _ -> fail "unknown category title" instance ToContent CategoryTitle where toContent = toContent . toJSON