module Yu.Core.Control.Internal
( lookupPostUnResT
, getFile
, getField
, putItem
, returnSucc
, Controly(..)
) where
import Data.Conduit
import Yesod.Core
import Yu.Core.Model
import Yu.Core.View
import qualified Yu.Import.ByteString as B
import Yu.Import.Text (Text)
import qualified Yu.Import.Text as T
import Yu.Utils.Handler
class (Mongodic site (HandlerT site IO), MonadHandler (HandlerT site IO), Hamletic site (HandlerT site IO), Yesod site) => Controly site
lookupPostUnResT :: Controly site
=> [Text]
-> HandlerT site IO (Maybe ResT)
lookupPostUnResT idx = do
ty <- lookupPostParam "type"
ct <- lookupPostParam "create-time"
ut <- lookupPostParam "update-time"
ti <- lookupPostParam "title"
su <- getField "summary"
wh <- lookupPostParam "whose"
mi <- lookupPostParam "mime"
tg <- lookupPostParams "tag"
ts <- T.words <#> lookupPostParams "tags"
return $ case (ty,ct,ut,ti) of
(Just t,Just c,Just u,Just i) -> Just . ResT
idx undefined t (T.read c) (T.read u) i su wh mi . concat $ tg:ts
_ -> Nothing
getFilesBS :: (MonadResource m, MonadHandler m)
=> [FileInfo]
-> m (Maybe B.ByteString)
getFilesBS [] = return Nothing
getFilesBS xs = Just. B.concat.concat <$>
mapM (sourceToList.fileSource) xs
getFile :: (MonadResource m, MonadHandler m)
=> T.Text
-> m (Maybe B.ByteString)
getFile file = getFilesBS =<< lookupFiles file
getField :: (MonadResource m, MonadHandler m)
=> T.Text
-> m (Maybe T.Text)
getField fieled = do
su <- T.decodeUtf8 <#> getFile fieled
case su of
Just s -> return su
_ -> lookupPostParam fieled
putItem :: (Controly site, Val a)
=> Maybe ResT
-> Maybe a
-> (a -> ResT -> Action (HandlerT site IO) ())
-> HandlerT site IO TypedContent
putItem unR item f = case (unR,item) of
(Just r,Just i) -> do
rt <- tryH.runDbDefault $ f i r
returnI rt
_ -> invalidArgs [" args failed"]
where
returnI (Left e) = returnEH e
returnI (Right _) = respondSource "" $ sendChunkText "success"
returnSucc :: HandlerT site IO TypedContent
returnSucc = respondSource "text/plain" $ sendChunkText "success"