2018-08-02 23:59:08 +03:00
|
|
|
{-# Language NoImplicitPrelude #-}
|
|
|
|
{-# Language DeriveGeneric #-}
|
|
|
|
{-# Language OverloadedStrings #-}
|
2018-08-03 23:36:38 +03:00
|
|
|
{-# Language DuplicateRecordFields #-}
|
2018-08-02 23:59:08 +03:00
|
|
|
module Database.Schema where
|
|
|
|
|
|
|
|
import ClassyPrelude
|
|
|
|
import Database.Selda.Generic
|
2018-08-03 23:36:38 +03:00
|
|
|
import Database.Selda
|
|
|
|
import Database.Selda.Backend
|
2018-08-02 23:59:08 +03:00
|
|
|
|
2018-08-03 23:36:38 +03:00
|
|
|
data User pass = User { email :: Text
|
|
|
|
, username :: Text
|
|
|
|
, role :: Role
|
|
|
|
, password :: pass }
|
2018-08-02 23:59:08 +03:00
|
|
|
deriving (Show, Generic)
|
|
|
|
|
2018-08-03 23:36:38 +03:00
|
|
|
data Role = UserRole | AdminRole deriving (Show, Read, Enum, Bounded, Typeable)
|
|
|
|
|
|
|
|
instance SqlType Role where
|
|
|
|
mkLit = LCustom . LText . pack . show
|
|
|
|
fromSql sql = case sql of
|
|
|
|
SqlString x -> fromMaybe (error "fromSql: Not a valid role") . readMay . unpack $ x
|
|
|
|
_ -> error "fromSql: Not a valid role"
|
|
|
|
|
|
|
|
defaultValue = mkLit minBound
|
|
|
|
|
|
|
|
users :: GenTable (User ByteString)
|
2018-08-02 23:59:08 +03:00
|
|
|
users = genTable "users" [ email :- primaryGen ]
|