diff options
| author | Joris | 2017-03-24 09:21:04 +0000 | 
|---|---|---|
| committer | Joris | 2017-03-24 09:21:04 +0000 | 
| commit | cfca18262c1ff48dcb683ddab7d03cf8e55573ff (patch) | |
| tree | 8a438430cee7411259fc395d8f3898488e85d750 /src/server/Model/Category.hs | |
| parent | 293eb8295162bf0a038f488237db9c9d1316c04d (diff) | |
Features/categories
Diffstat (limited to 'src/server/Model/Category.hs')
| -rw-r--r-- | src/server/Model/Category.hs | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/src/server/Model/Category.hs b/src/server/Model/Category.hs new file mode 100644 index 0000000..50c3622 --- /dev/null +++ b/src/server/Model/Category.hs @@ -0,0 +1,56 @@ +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  | 
