{-# LANGUAGE OverloadedStrings #-} module Model.PaymentCategory ( list , listByCategory , save ) where import Control.Monad.IO.Class (liftIO) import Data.Maybe (isJust) import Data.Text (Text) import Data.Time.Clock (getCurrentTime) import Database.Persist import qualified Data.Text as T import Model.Database import qualified Model.Json.PaymentCategory as Json import qualified Utils.Text as T list :: Persist [Json.PaymentCategory] list = map getJsonPaymentCategory <$> selectList [] [] listByCategory :: CategoryId -> Persist [Entity PaymentCategory] listByCategory category = selectList [ PaymentCategoryCategory ==. category ] [] getJsonPaymentCategory :: Entity PaymentCategory -> Json.PaymentCategory getJsonPaymentCategory entity = Json.PaymentCategory (paymentCategoryName pc) (paymentCategoryCategory pc) where pc = entityVal entity save :: Text -> CategoryId -> Persist () save newName category = do now <- liftIO getCurrentTime mbPaymentCategory <- selectFirst [PaymentCategoryName ==. (formatPaymentName newName)] [] if isJust mbPaymentCategory then updateWhere [ PaymentCategoryName ==. (formatPaymentName newName) ] [ PaymentCategoryCategory =. category , PaymentCategoryEditedAt =. Just now ] else do _ <- insert $ PaymentCategory (formatPaymentName newName) category now Nothing return () formatPaymentName :: Text -> Text formatPaymentName = T.unaccent . T.toLower