30 lines
930 B
Haskell
Raw Normal View History

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 ]