{-# LANGUAGE FlexibleInstances #-} module RESTng.Resources.UserModel where import Database.HDBC (SqlType, toSql, fromSql) import Text.ParserCombinators.Parsec (parse) import Data.Maybe(fromMaybe) import RESTng.Database.Record import RESTng.Resources.User import RESTng.System.Resource import RESTng.System.RelationalResource import RESTng.System.PersistableResource import RESTng.System.FormFields userProxy :: Proxy User userProxy = undefined instance SqlType [UserRole] where toSql = toSql . show fromSql = fromMaybe [] . readField . fromSql instance Field [UserRole] where defaultValue = [] instance Resource User where key = user_id setKey p k = p{user_id = k} resourceType _ = "User" userFields _ = ["username", "passwd", "roles"] --TODO: in case we want the User to edit -- some of its attributes, then we should -- made ownable _ = True, and the attribute must be the user_id field. instance RelationalResource User where tableName _ = "Users" userFieldsToSql u = [toSql $ username u, toSql $ passwd u, toSql $ roles u] -- sqlUserFieldsParser :: SystemFields -> SqlValueParser a sqlUserFieldsParser (k, _) = do uname <- sqlFieldParser pass <- sqlFieldParser rls <- sqlFieldParser return (User k uname pass rls) instance PersistableResource User where persistableFunctions = persistableFromRelational