module Snap.Snaplet.ActionLog
(
ActionLog
, initActionLog
, HasActionLog(..)
, ActionType(..)
, actionToInt
, intToAction
, DeltaField(..)
, CanDelta(..)
, storeDeltas
, getDeltas
, getLoggedAction
, getEntityActions
, getAllActions
, getTenantActions
, getTenantEntities
, getTenantUids
, logAction
, loggedInsert
, loggedReplace
, loggedUpdate
, loggedDelete
, loggedDeleteKey
, actionLogEntityDefs
, migrateActionLog
, LoggedActionGeneric(..)
, LoggedAction
, LoggedActionId
, LoggedActionDetailsGeneric(..)
, LoggedActionDetails
, LoggedActionDetailsId
) where
import Data.Monoid
import Data.Text.Encoding
import Heist
import qualified Heist.Interpreted as I
import Snap
import Snap.Restful
import Snap.Snaplet.Heist.Compiled
import Snap.Snaplet.ActionLog.API
import Snap.Snaplet.ActionLog.Resource
import Snap.Snaplet.ActionLog.Types
import Paths_snaplet_actionlog
initActionLog :: (HasActionLog (Handler b b), HasHeist b)
=> Snaplet (Heist b) -> SnapletInit b ActionLog
initActionLog heist = makeSnaplet "actionlog" description datadir $ do
url <- getSnapletRootURL
let resource = actionLogR { rRoot = decodeUtf8 url }
addResourceRelative resource
[(RIndex, indexH), (RShow, showH)] [] [] heist
addConfig heist $ mempty
{ hcCompiledSplices = actionLogSplices resource
, hcInterpretedSplices = actionLogISplices resource
, hcLoadTimeSplices =
[ ("actionlogTemplate", I.textSplice $ decodeUtf8 url)
]
}
addTemplates heist ""
return ActionLog
where
description = "Snaplet providing generalized logging"
datadir = Just $ liftM (++"/resources") getDataDir