We finally have a card type
This commit is contained in:
parent
c0d0e91dc4
commit
1728fefa44
2 changed files with 34 additions and 17 deletions
|
@ -9,13 +9,14 @@ import Control.Monad
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
|
||||||
data TestField = TestField Int T.Text deriving (Show)
|
data Card = Card Int T.Text T.Text deriving (Show)
|
||||||
|
|
||||||
instance FromRow TestField where
|
instance FromRow Card where
|
||||||
fromRow = TestField <$> field <*> field
|
fromRow = Card <$> field <*> field <*> field
|
||||||
|
|
||||||
instance ToRow TestField where
|
instance ToRow Card where
|
||||||
toRow (TestField id_ str) = toRow (id_, str)
|
|
||||||
|
toRow (Card id_ str image_uri) = toRow (id_, str, image_uri)
|
||||||
|
|
||||||
search :: String -> IO String
|
search :: String -> IO String
|
||||||
search q = do
|
search q = do
|
||||||
|
@ -25,5 +26,12 @@ simpleSearch :: String -> IO String
|
||||||
simpleSearch q = do
|
simpleSearch q = do
|
||||||
dbPath <- getDbPath
|
dbPath <- getDbPath
|
||||||
conn <- open dbPath
|
conn <- open dbPath
|
||||||
res <- queryNamed conn "select id, name from card where name like :name" [":name" := ("%"++q++"%")] :: IO [TestField]
|
res <- queryNamed conn "select id, name, image_uri from card where name like :name" [":name" := ("%"++q++"%")] :: IO [Card]
|
||||||
return (show res)
|
let hyperText = buildHtml res
|
||||||
|
return hyperText
|
||||||
|
|
||||||
|
buildHtml :: [Card] -> String
|
||||||
|
buildHtml = concatMap cardToHtml
|
||||||
|
|
||||||
|
cardToHtml :: Card -> String
|
||||||
|
cardToHtml (Card id name image_uri) = "<h2>" ++ show name ++ "</h2>" ++ "<img src=" ++ show image_uri ++ "/>"
|
27
src/Lib.hs
27
src/Lib.hs
|
@ -4,31 +4,40 @@ module Lib
|
||||||
) where
|
) where
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import Data.Text
|
import Data.Text
|
||||||
import Control.Applicative
|
|
||||||
import Control.Monad
|
|
||||||
import qualified Data.ByteString.Lazy as B
|
import qualified Data.ByteString.Lazy as B
|
||||||
import Control.Applicative
|
|
||||||
import qualified Data.Text as T
|
|
||||||
import Database.SQLite.Simple
|
import Database.SQLite.Simple
|
||||||
|
|
||||||
import Config
|
import Config
|
||||||
|
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import GHC.Read (readField)
|
data ImageUris = ImageUris {
|
||||||
|
small :: Text,
|
||||||
|
normal :: Text,
|
||||||
|
large :: Text,
|
||||||
|
png :: Text,
|
||||||
|
art_crop :: Text,
|
||||||
|
border_crop :: Text
|
||||||
|
}deriving (Show,Generic)
|
||||||
|
instance FromJSON ImageUris
|
||||||
|
instance ToJSON ImageUris
|
||||||
|
|
||||||
data Card = Card{
|
data Card = Card{
|
||||||
object :: Text,
|
object :: Text,
|
||||||
id :: Text,
|
id :: Text,
|
||||||
lang :: Text,
|
lang :: Text,
|
||||||
name :: Text,
|
name :: Text,
|
||||||
oracle_text :: Maybe Text
|
oracle_text :: Maybe Text,
|
||||||
|
image_uris :: Maybe ImageUris
|
||||||
} deriving (Show,Generic)
|
} deriving (Show,Generic)
|
||||||
|
|
||||||
instance FromJSON Card
|
instance FromJSON Card
|
||||||
instance ToJSON Card
|
instance ToJSON Card
|
||||||
|
|
||||||
instance ToRow Card where
|
instance ToRow Card where
|
||||||
toRow (Card object id lang name oracle_text) = toRow (id, lang, name, oracle_text)
|
toRow (Card object id lang name oracle_text (Just (ImageUris _ image_link _ _ _ _ ))) = toRow (id, lang, name, oracle_text, image_link)
|
||||||
|
toRow (Card object id lang name oracle_text Nothing) = toRow (id, lang, name, oracle_text, pack "Nothing")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +46,7 @@ getJSON file = B.readFile file
|
||||||
|
|
||||||
insertCards :: Connection -> [Card] -> IO()
|
insertCards :: Connection -> [Card] -> IO()
|
||||||
insertCards conn ((card):cards) = do
|
insertCards conn ((card):cards) = do
|
||||||
execute conn "INSERT INTO card (scryfall_id, lang, name, oracle_text) VALUES (?,?,?,?)" card
|
execute conn "INSERT INTO card (scryfall_id, lang, name, oracle_text, image_uri) VALUES (?,?,?,?,?)" card
|
||||||
insertCards conn cards
|
insertCards conn cards
|
||||||
return ()
|
return ()
|
||||||
insertCards conn [] = return ()
|
insertCards conn [] = return ()
|
||||||
|
@ -50,7 +59,7 @@ seedData = do
|
||||||
dbPath <- getDbPath
|
dbPath <- getDbPath
|
||||||
d <- (eitherDecode <$> getJSON seedData) :: IO (Either String [Card])
|
d <- (eitherDecode <$> getJSON seedData) :: IO (Either String [Card])
|
||||||
conn <- open dbPath
|
conn <- open dbPath
|
||||||
execute_ conn "CREATE TABLE IF NOT EXISTS card (id INTEGER PRIMARY KEY, scryfall_id TEXT, lang TEXT, name TEXT, oracle_text TEXT)"
|
execute_ conn "CREATE TABLE IF NOT EXISTS card (id INTEGER PRIMARY KEY, scryfall_id TEXT, lang TEXT, name TEXT, oracle_text TEXT, image_uri TEXT)"
|
||||||
|
|
||||||
|
|
||||||
case d of
|
case d of
|
||||||
|
|
Loading…
Reference in a new issue