packages feed

quokka-0.1.0.0: test/Quokka/Tables.hs

{-# LANGUAGE OverloadedStrings #-}

module Quokka.Tables (
  accountTableAsChild
, insertAccounts
, insertProfiles
, insertUsers
, userTable
) where

import Database.PostgreSQL.Simple (Connection, ToRow)
import Quokka.Types (ChildTable (..), Id (..), ParentTable (..))
import Quokka.Functions (build, buildWith1Rel, buildWithManyRels)


userTable :: ParentTable
userTable =
  ParentTable "users" ["firstname", "lastname", "age"]


accountTableAsParent :: ParentTable
accountTableAsParent =
  ParentTable "accounts" ["name", "description"]


accountTableAsChild :: ChildTable
accountTableAsChild =
  ChildTable "accounts" ["name", "description"]


profileTable :: ChildTable
profileTable =
  ChildTable "profiles" ["active"]


insertUsers
  :: (ToRow q)
  => Connection
  -> [q]
  -> IO [Id]
insertUsers conn =
  build conn userTable


insertAccounts
  :: (ToRow q)
  => Connection
  -> [q]
  -> IO [Id]
insertAccounts conn =
  buildWith1Rel conn userTable accountTableAsChild


insertProfiles
  :: (ToRow q)
  => Connection
  -> [q]
  -> IO [Id]
insertProfiles conn =
  buildWithManyRels conn [userTable, accountTableAsParent] profileTable