module YesodDsl.Generator.EntityFactories where
import YesodDsl.AST
import Data.Maybe
import qualified Data.Text as T
import Data.List
import Text.Shakespeare.Text hiding (toText)
import YesodDsl.Generator.Common
import YesodDsl.Generator.Models (baseFieldType)
entityFactory :: Entity -> String
entityFactory e = T.unpack $(codegenFile "codegen/entity-factory.cg")
where requiredFields = [ f | f <- entityFields e,
fieldOptional f == False,
isNothing $ fieldDefault f ]
defaultFields = (entityFields e) \\ requiredFields
fieldParamName f = fieldName f ++ "_"
fieldSetter f = entityFieldName e f ++ " = " ++ value f
value f
| f `elem` requiredFields = fieldParamName f
| fieldOptional f = "Nothing"
|otherwise = case fieldDefault f of
Just fv -> fieldValueToHs fv
Nothing -> error "missing default value in entityFactory"
entityFactories :: Module -> String
entityFactories m = concatMap entityFactory (modEntities m)