module Model.Category ( list , create , edit , delete ) where import Data.Text (Text) import Data.Maybe (isJust) import Data.Time.Clock (getCurrentTime) import Control.Monad.IO.Class (liftIO) import Database.Persist hiding (delete) import Model.Database import qualified Model.Json.Category as Json list :: Persist [Json.Category] list = map getJsonCategory <$> selectList [ CategoryDeletedAt ==. Nothing ] [] getJsonCategory :: Entity Category -> Json.Category getJsonCategory categoryEntity = Json.Category (entityKey categoryEntity) (categoryName category) (categoryColor category) where category = entityVal categoryEntity create :: Text -> Text -> Persist CategoryId create name color = do now <- liftIO getCurrentTime insert (Category name color now Nothing Nothing) edit :: CategoryId -> Text -> Text -> Persist Bool edit categoryId name color = do mbCategory <- get categoryId if isJust mbCategory then do now <- liftIO getCurrentTime update categoryId [ CategoryEditedAt =. Just now , CategoryName =. name , CategoryColor =. color ] return True else return False delete :: CategoryId -> Persist Bool delete categoryId = do mbCategory <- get categoryId if isJust mbCategory then do now <- liftIO getCurrentTime update categoryId [CategoryDeletedAt =. Just now] return True else return False