{-# options_haddock prune #-} {-# options_ghc -Wno-partial-type-signatures #-} -- | Description: Sqel Dd definitions for account and auth tables module Polysemy.Account.Db.Dd where import Prelude hiding (Mod) import Sqel ( Dd, EnumColumn, Mod, Mods, Prim, PrimNewtype, PrimaryKey, Prod, Sqel, Uid, UidDd, array, enum, nullable, pk, prim, primNewtype, prod, uid, type (*>), type (:>) ((:>)), type (>), ) import Sqel.Codec (PrimColumn) import Sqel.Comp (Column) import Sqel.Data.Codec (FullCodec) import Sqel.Data.PgType (PgPrimName) import Sqel.Data.TableSchema (TableSchema) import Sqel.Ext (named) import Sqel.PgType (tableSchema) import Sqel.ReifyCodec (ReifyCodec) import Sqel.ReifyDd (ReifyDd) import Polysemy.Account.Data.Account (Account, AccountP) import Polysemy.Account.Data.AccountAuth (AccountAuth) import Polysemy.Account.Data.AccountName (AccountName) import Polysemy.Account.Data.AccountStatus (AccountStatus) import Polysemy.Account.Data.Privilege (Privilege) type DdAccount i p s = UidDd (Mod PrimaryKey (Prim "id" i)) ( Prod (Account p) *> PrimNewtype "name" AccountName > Mods [PgPrimName, EnumColumn] (Prim "status" AccountStatus) > s ) privileges :: Sqel [Privilege] _ privileges = named @"privileges" (array enum) account :: Column p "privileges" s s => Dd s -> Dd (DdAccount i p s) account p = uid (pk prim) (prod (primNewtype :> enum :> p)) accountP :: Sqel (Uid i AccountP) _ accountP = account privileges accountSchema :: PrimColumn i => Column p "privileges" s s => ReifyCodec FullCodec s p => ReifyDd s => Dd s -> TableSchema (Uid i (Account p)) accountSchema p = tableSchema (account p) accountSchemaP :: PrimColumn i => TableSchema (Uid i AccountP) accountSchemaP = tableSchema accountP accountAuth :: Sqel (Uid i (AccountAuth i)) _ accountAuth = uid (pk prim) (prod (prim :> primNewtype :> primNewtype :> nullable prim)) accountAuthSchema :: PrimColumn i => TableSchema (Uid i (AccountAuth i)) accountAuthSchema = tableSchema accountAuth