persistent-audit-0.1.0.0: src/Database/Persist/Audit/Class.hs
{-# LANGUAGE TypeFamilies #-}
module Database.Persist.Audit.Class where
import Data.Text (Text)
import Data.Time (UTCTime)
import Database.Persist.Types
import Database.Persist.Audit.Types
-- | Persistent Model types that have a corresponding Audit type as produced by 'Database.Persist.Audit.Generator.generateAuditModels'
-- need to implement 'ToAudit' in order to use the queries
-- from 'Database.Persist.Audit.Queries'. Given the following two Persistent models:
--
-- @
-- Person
-- name String
-- age Int Maybe
--
-- PersonAudit
-- name String
-- age Int Maybe
-- originalId PersonId noreference
-- auditAction AuditAction
-- editedBy Text
-- editedOn UTCTime
--
-- @
--
-- The 'ToAudit' instance should look like this:
--
-- @
-- instance ToAudit Person where
-- type AuditResult Person = PersonAudit
-- toAudit v k auditAction editedBy editedOn = PersonAudit (personName v)
-- (personAge v)
-- k auditAction editedBy editedOn
-- @
--
-- 'Database.Persist.Audit.Generator.generateAuditModels' can help automate these instances.
class ToAudit a where
type AuditResult a :: *
toAudit :: a -> Key a -> AuditAction -> Text -> UTCTime -> AuditResult a