-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A minimally obtrusive feature flag library -- -- A minimally obtrusive feature flag library @package feature-flipper-postgres @version 0.1.1.1 module Control.Flipper.Adapters.Postgres.Models data Feature Feature :: !FeatureName -> !Bool -> !Percentage -> !UTCTime -> !UTCTime -> Feature [featureName] :: Feature -> !FeatureName [featureEnabled] :: Feature -> !Bool [featureEnabledPercentage] :: Feature -> !Percentage [featureUpdated] :: Feature -> !UTCTime [featureCreated] :: Feature -> !UTCTime data Actor Actor :: !ActorId -> !(Key Feature) -> !UTCTime -> !UTCTime -> Actor [actorActorId] :: Actor -> !ActorId [actorFeatureId] :: Actor -> !(Key Feature) [actorUpdated] :: Actor -> !UTCTime [actorCreated] :: Actor -> !UTCTime type ActorId = Key Actor type FeatureId = Key Feature migrateAll :: Migration type FeatureWithActorIds = (Feature, Set ActorId) -- | Convienience constructor mkFeature :: FeatureName -> Bool -> IO Feature modelsToFeatures :: [Entity Feature] -> Features modelToFeature :: Feature -> Feature actorIdToModel :: ActorId -> FeatureId -> IO Actor featureToModel :: Feature -> IO FeatureWithActorIds toFeatureTuple :: Feature -> (FeatureName, Feature) -- | Performs non-destructive database schema migrations. runMigrations :: ConnectionPool -> IO [Text] instance GHC.Classes.Eq Control.Flipper.Adapters.Postgres.Models.Actor instance GHC.Show.Show Control.Flipper.Adapters.Postgres.Models.Actor instance GHC.Classes.Eq Control.Flipper.Adapters.Postgres.Models.Feature instance GHC.Show.Show Control.Flipper.Adapters.Postgres.Models.Feature instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Actor) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key Control.Flipper.Adapters.Postgres.Models.Feature) instance Database.Persist.Class.PersistField.PersistField Control.Flipper.Adapters.Postgres.Models.Actor instance Database.Persist.Sql.Class.PersistFieldSql Control.Flipper.Adapters.Postgres.Models.Actor instance Database.Persist.Class.PersistField.PersistField Control.Flipper.Adapters.Postgres.Models.Feature instance Database.Persist.Sql.Class.PersistFieldSql Control.Flipper.Adapters.Postgres.Models.Feature instance Database.Persist.Class.PersistEntity.PersistEntity Control.Flipper.Adapters.Postgres.Models.Actor instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend Control.Flipper.Adapters.Postgres.Models.Actor instance Database.Persist.Class.PersistEntity.PersistEntity Control.Flipper.Adapters.Postgres.Models.Feature instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend Control.Flipper.Adapters.Postgres.Models.Feature instance Database.Persist.Class.PersistField.PersistField Control.Flipper.Types.FeatureName instance Database.Persist.Class.PersistField.PersistField Control.Flipper.Types.ActorId instance Database.Persist.Class.PersistField.PersistField Control.Flipper.Types.Percentage module Control.Flipper.Adapters.Postgres.Internal.Query -- | Selects all feature records selectFeatures :: SqlPersistT IO [Entity Feature] -- | Selects all actors for a given feature records selectActorsByFeatureId :: FeatureId -> SqlPersistT IO [Entity Actor] -- | Selects a feature record by its unique name findFeature :: FeatureName -> SqlPersistT IO (Maybe (Entity Feature)) -- | Inserts a new actor record. insertActor :: Actor -> SqlPersistT IO (Key Actor) -- | Deletes an actor record. deleteActor :: FeatureId -> ActorId -> SqlPersistT IO () -- | Inserts a new feature record. insertFeature :: Feature -> SqlPersistT IO (Key Feature) -- | Updates an existing feature record. updateFeature :: FeatureId -> Feature -> SqlPersistT IO () -- | Returns a count of all feature records countActors :: SqlPersistT IO Int -- | Returns a count of all feature records countFeatures :: SqlPersistT IO Int module Control.Flipper.Adapters.Postgres.DBAccess -- | Database query interface data DBAccess m DBAccess :: (forall a. m a -> IO a) -> m [Entity Feature] -> (FeatureId -> m [Entity Actor]) -> (FeatureName -> m (Maybe (Entity Feature))) -> (Actor -> m (Key Actor)) -> (FeatureId -> ActorId -> m ()) -> (Feature -> m (Key Feature)) -> (FeatureId -> Feature -> m ()) -> m Int -> m Int -> DBAccess m [runDb] :: DBAccess m -> forall a. m a -> IO a [selectFeatures] :: DBAccess m -> m [Entity Feature] [selectActorsByFeatureId] :: DBAccess m -> FeatureId -> m [Entity Actor] [findFeature] :: DBAccess m -> FeatureName -> m (Maybe (Entity Feature)) [insertActor] :: DBAccess m -> Actor -> m (Key Actor) [deleteActor] :: DBAccess m -> FeatureId -> ActorId -> m () [insertFeature] :: DBAccess m -> Feature -> m (Key Feature) [updateFeature] :: DBAccess m -> FeatureId -> Feature -> m () [countActors] :: DBAccess m -> m Int [countFeatures] :: DBAccess m -> m Int -- | Creates a DBAccess backed by a SqlPersistT context db :: ConnectionPool -> DBAccess (SqlPersistT IO) module Control.Flipper.Adapters.Postgres.Query -- | Selects all feature records Returns domain model getFeatures :: (MonadIO app, Monad m) => DBAccess m -> app Features -- | Selects a feature record by its unique name Returns a domain model getFeatureByName :: (MonadIO app, Monad m) => FeatureName -> DBAccess m -> app (Maybe Feature) -- | Inserts a new feature record and all associated actors. addFeature :: (MonadIO app, Monad m) => Feature -> DBAccess m -> app (Key Feature) -- | Inserts a new feature record if one with a matching name does not -- already exist. Updates an existing feature record if one with a -- matching name already exists. upsertFeature :: (MonadIO app, Monad m) => Feature -> DBAccess m -> app () -- | Returns a count of all actor records actorCount :: (MonadIO app, Monad m) => DBAccess m -> app Int -- | Returns a count of all feature records featureCount :: (MonadIO app, Monad m) => DBAccess m -> app Int -- | Convienience constructor mkFeature :: FeatureName -> Bool -> IO Feature module Control.Flipper.Adapters.Postgres data Config Config :: ConnectionPool -> DBAccess m -> Config [appDBConn] :: Config -> ConnectionPool [appDB] :: Config -> DBAccess m -- | The FlipperT transformer for postgres-persisted feature -- switchable computation. newtype FlipperT m a FlipperT :: ReaderT Config m a -> FlipperT m a [unFlipper] :: FlipperT m a -> ReaderT Config m a -- | Evaluates a feature-switched computation, returning the final value runFlipperT :: (MonadIO m) => ConnectionPool -> FlipperT m a -> m a instance Control.Monad.Trans.Class.MonadTrans Control.Flipper.Adapters.Postgres.FlipperT instance GHC.Base.Monad m => Control.Monad.Reader.Class.MonadReader Control.Flipper.Adapters.Postgres.Config (Control.Flipper.Adapters.Postgres.FlipperT m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Flipper.Adapters.Postgres.FlipperT m) instance GHC.Base.Monad m => GHC.Base.Monad (Control.Flipper.Adapters.Postgres.FlipperT m) instance GHC.Base.Applicative m => GHC.Base.Applicative (Control.Flipper.Adapters.Postgres.FlipperT m) instance GHC.Base.Functor m => GHC.Base.Functor (Control.Flipper.Adapters.Postgres.FlipperT m) instance Control.Monad.IO.Class.MonadIO m => Control.Flipper.Types.HasFeatureFlags (Control.Flipper.Adapters.Postgres.FlipperT m) instance Control.Monad.IO.Class.MonadIO m => Control.Flipper.Types.ModifiesFeatureFlags (Control.Flipper.Adapters.Postgres.FlipperT m)