Skip to content

Instantly share code, notes, and snippets.

@ahammar
Created April 13, 2014 16:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahammar/10591992 to your computer and use it in GitHub Desktop.
Save ahammar/10591992 to your computer and use it in GitHub Desktop.
Generic sort options in persistent
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies #-}
{-# LANGUAGE OverloadedStrings, GADTs #-}
import Data.Text (Text)
import Data.Time (UTCTime)
import Database.Persist
import Database.Persist.Sqlite (runSqlite, runMigration)
import Database.Persist.TH (mkPersist, persistLowerCase, sqlSettings)
mkPersist sqlSettings [persistLowerCase|
Model
name Text
created UTCTime
deriving Show
|]
getModelSorterOpt :: Text -> Text -> Maybe (SelectOpt Model)
getModelSorterOpt sortOrder sortField =
case sortField of
"id" -> Just $ sortOrder' ModelId
"name" -> Just $ sortOrder' ModelName
"created" -> Just $ sortOrder' ModelCreated
_ -> Nothing
where sortOrder' :: EntityField Model typ -> SelectOpt Model
sortOrder' = case sortOrder of
"Asc" -> Asc
"Desc" -> Desc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment