Frames-beam-0.1.0.0: test/NewBeamSchema.hs
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE ExplicitNamespaces #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeSynonymInstances #-}
module NewBeamSchema
(db, migration, Db(..), Cart_usersT(..), Cart_usersT,
Cart_usersKey)
where
import Database.Beam
import Control.Applicative
import Data.Text (Text)
import Database.Beam.Migrate
(CheckedDatabaseSettings, Migration, Sql92SaneDdlCommandSyntax,
boolean, createTable, field, int, notNull, runMigrationSilenced,
unCheckDatabase, varchar)
import Database.Beam.Postgres
data Cart_usersT f = Cart_users{_cart_usersEmail ::
Columnar f Text,
_cart_usersFirst_name :: Columnar f Text,
_cart_usersLast_name :: Columnar f Text,
_cart_usersIs_member :: Columnar f Bool,
_cart_usersDays_in_queue :: Columnar f Int}
deriving Generic
instance Beamable Cart_usersT
type Cart_users = Cart_usersT Identity
deriving instance Show Cart_users
deriving instance Eq Cart_users
instance Table Cart_usersT where
data PrimaryKey Cart_usersT f = Cart_usersKey (Columnar f Text)
deriving Generic
primaryKey = Cart_usersKey <$> _cart_usersEmail
type Cart_usersKey = PrimaryKey Cart_usersT Identity
instance Beamable (PrimaryKey Cart_usersT)
deriving instance Eq Cart_usersKey
deriving instance Show Cart_usersKey
data Db entity = Db{_cart_users ::
entity (TableEntity Cart_usersT)}
deriving Generic
migration :: Migration PgCommandSyntax (CheckedDatabaseSettings Postgres Db)
migration
= do cart_users <- createTable "cart_users"
(Cart_users (field "email" (varchar Nothing) notNull)
(field "first_name" (varchar Nothing) notNull)
(field "last_name" (varchar Nothing) notNull)
(field "is_member" boolean notNull)
(field "days_in_queue" int notNull))
pure Db{_cart_users = cart_users}
instance Database be Db
db :: DatabaseSettings Postgres Db
db = unCheckDatabase (runMigrationSilenced (migration))