{-# 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