{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-} {-# OPTIONS_GHC -fallow-incoherent-instances #-} module Resource.Author where import Prelude hiding (div,span) import Database.HDBC (toSql) import Text.ParserCombinators.Parsec (parse) import Text.CxML import Text.YuiGrid import RESTng.System data Author = Author { author_id :: Integer, name :: String, age :: Integer } authorProxy :: Proxy Author authorProxy = undefined instance Resource Author where resourceType _ = "Author" key = author_id setKey res k = res {author_id = k} userFields _ = ["name", "age"] instance RelationalResource Author where userFieldsToSql res = [toSql $ name res, toSql $ age res] sqlUserFieldsParser (k, _) = do (name, age) <- sqlRecordParser return (Author k name age) instance CanCreateSchemaForResource Author where --userFieldsReps :: Proxy a -> [TypeRep] userFieldsReps _ = [stringTR, integerTR] --userFieldsDefaultValues :: Proxy a -> [Maybe String] -- default value sql expression userFieldsDefaultValues _ = [Nothing, Nothing] instance PersistableResource Author where persistableFunctions = persistableFromRelational instance WebResource Author where userFieldValues res = [showField $ name res, showField $ age res] userFieldValuesParser (k, _) = do name <- parseNotEmpty "name" age <- parseField "age" return (Author k name age) {- showHtml (Author k name age) = h3 /- [t name] +++ h4 /- [t $ "Age: " ++ show age] -} showShortHtml = t . name instance InGridResource Author where showLayout a b c = map (addCss ("padded", [("padding","3px")])) (showLayoutDefault a b c) listView = listInBoxesView