summaryrefslogtreecommitdiff
path: root/Hero/Database.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hero/Database.hs')
-rw-r--r--Hero/Database.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/Hero/Database.hs b/Hero/Database.hs
new file mode 100644
index 0000000..5726f3c
--- /dev/null
+++ b/Hero/Database.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Hero.Database
+ ( ComicDB
+ , getComics
+ , load
+ , dummy
+ )
+where
+
+import Hero.App
+import Data.Map ( Map )
+import qualified Data.Map as Map
+import Dhall
+import Protolude
+import Servant ( Handler )
+
+type ComicDB = (Map ComicId Comic)
+
+instance Interpret Comic
+
+load :: IO ComicDB
+load = listToComicDB <$> input auto "./comic-database.dhall"
+
+dummy :: IO ComicDB
+dummy = return $ listToComicDB
+ [ Comic { comicId = "ComicId"
+ , comicPages = 10
+ , comicName = "Dummy comic"
+ , comicIssue = "dummy issue"
+ , comicDescription = "Lorem ipsum"
+ }
+ ]
+
+listToComicDB :: [Comic] -> ComicDB
+listToComicDB ls = Map.fromList $ (,) <$> comicId <*> identity <$> ls
+
+getComics :: ComicDB -> Handler [Comic]
+getComics db = return $ Map.elems db