{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Eventium.Store.Sql.DefaultEntity
( SqlEvent (..),
SqlEventId,
migrateSqlEvent,
defaultSqlEventStoreConfig,
)
where
import Database.Persist (Key)
import Database.Persist.Sql (fromSqlKey, toSqlKey)
import Database.Persist.TH
import Eventium.Store.Class
import Eventium.Store.Sql.JSONString
import Eventium.Store.Sql.Operations
import Eventium.Store.Sql.Orphans ()
import Eventium.UUID
share
[mkPersist sqlSettings, mkMigrate "migrateSqlEvent"]
[persistLowerCase|
SqlEvent sql=events
uuid UUID
version EventVersion
event JSONString
UniqueUuidVersion uuid version
deriving Show
|]
sqlEventMakeKey :: SequenceNumber -> Key SqlEvent
sqlEventMakeKey :: SequenceNumber -> Key SqlEvent
sqlEventMakeKey SequenceNumber
sequenceNumber =
Int64 -> Key SqlEvent
forall record.
ToBackendKey SqlBackend record =>
Int64 -> Key record
toSqlKey (Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (SequenceNumber -> Int
unSequenceNumber SequenceNumber
sequenceNumber))
sqlEventUnKey :: Key SqlEvent -> SequenceNumber
sqlEventUnKey :: Key SqlEvent -> SequenceNumber
sqlEventUnKey Key SqlEvent
key =
Int -> SequenceNumber
SequenceNumber (Int64 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Key SqlEvent -> Int64
forall record.
ToBackendKey SqlBackend record =>
Key record -> Int64
fromSqlKey Key SqlEvent
key))
defaultSqlEventStoreConfig :: SqlEventStoreConfig SqlEvent JSONString
defaultSqlEventStoreConfig :: SqlEventStoreConfig SqlEvent JSONString
defaultSqlEventStoreConfig =
(UUID -> EventVersion -> JSONString -> SqlEvent)
-> (SequenceNumber -> Key SqlEvent)
-> (Key SqlEvent -> SequenceNumber)
-> (SqlEvent -> UUID)
-> (SqlEvent -> EventVersion)
-> (SqlEvent -> JSONString)
-> EntityField SqlEvent (Key SqlEvent)
-> EntityField SqlEvent UUID
-> EntityField SqlEvent EventVersion
-> EntityField SqlEvent JSONString
-> SqlEventStoreConfig SqlEvent JSONString
forall entity serialized.
(UUID -> EventVersion -> serialized -> entity)
-> (SequenceNumber -> Key entity)
-> (Key entity -> SequenceNumber)
-> (entity -> UUID)
-> (entity -> EventVersion)
-> (entity -> serialized)
-> EntityField entity (Key entity)
-> EntityField entity UUID
-> EntityField entity EventVersion
-> EntityField entity serialized
-> SqlEventStoreConfig entity serialized
SqlEventStoreConfig
UUID -> EventVersion -> JSONString -> SqlEvent
SqlEvent
SequenceNumber -> Key SqlEvent
sqlEventMakeKey
Key SqlEvent -> SequenceNumber
sqlEventUnKey
SqlEvent -> UUID
sqlEventUuid
SqlEvent -> EventVersion
sqlEventVersion
SqlEvent -> JSONString
sqlEventEvent
EntityField SqlEvent (Key SqlEvent)
forall typ. (typ ~ Key SqlEvent) => EntityField SqlEvent typ
SqlEventId
EntityField SqlEvent UUID
forall typ. (typ ~ UUID) => EntityField SqlEvent typ
SqlEventUuid
EntityField SqlEvent EventVersion
forall typ. (typ ~ EventVersion) => EntityField SqlEvent typ
SqlEventVersion
EntityField SqlEvent JSONString
forall typ. (typ ~ JSONString) => EntityField SqlEvent typ
SqlEventEvent