{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeFamilies #-} module Types.User where import GHC.Generics import Data.Time.Calendar (Day) import Data.Aeson import Data.OpenApi (ToSchema) import qualified Data.Text as T -- internal imports import Classes data User = User { userId :: Int , userIdent :: T.Text , userBalance :: Int , userTimeStamp :: Day , userEmail :: Maybe T.Text , userAvatar :: Maybe Int -- , userSalt :: AuthSalt -- , userHash :: Maybe AuthHash -- , userAlgo :: Maybe Int } deriving (Generic, Show) instance DatabaseRepresentation User where type Representation User = (Int, T.Text, Int, Day, Maybe T.Text, Maybe Int) instance ToDatabase User where toDatabase (User id_ ident bal ts email ava) = (id_, ident, bal, ts, email, ava) instance FromDatabase User where fromDatabase (id_, ident, bal, ts, email, ava) = User id_ ident bal ts email ava data UserSummary = UserSummary { userSummaryId :: Int , userSummaryIdent :: T.Text , userSummaryAvatar :: Maybe Int } deriving (Generic, Show) instance ToJSON UserSummary where toEncoding = genericToEncoding defaultOptions instance FromJSON UserSummary instance ToSchema UserSummary data UserSubmit = UserSubmit { userSubmitIdent :: T.Text , userSubmitEmail :: Maybe T.Text , userSubmitPassword :: T.Text } deriving (Generic, Show) instance ToJSON UserSubmit where toEncoding = genericToEncoding defaultOptions instance FromJSON UserSubmit instance ToSchema UserSubmit data UserDetails = UserDetails { userDetailsId :: Int , userDetailsIdent :: T.Text , userDetailsBalance :: Int , userDetailsEmail :: Maybe T.Text , userDetailsAvatar :: Maybe Int -- , userDetailsSalt :: AuthSalt -- , userDetailsAlgo :: Maybe AuthAlgorithm } deriving (Generic, Show) instance ToJSON UserDetails where toEncoding = genericToEncoding defaultOptions instance FromJSON UserDetails instance ToSchema UserDetails data UserDetailsSubmit = UserDetailsSubmit { userDetailsSubmitIdent :: T.Text , userDetailsSubmitEmail :: Maybe T.Text , userDetailsSubmitAvatar :: Maybe Int -- , userDetailsSubmitHash :: Maybe AuthHash -- , userDetailsSubmitAlgo :: Maybe AuthAlgorithm } deriving (Generic, Show) instance ToJSON UserDetailsSubmit where toEncoding = genericToEncoding defaultOptions instance FromJSON UserDetailsSubmit instance ToSchema UserDetailsSubmit newtype UserRecharge = UserRecharge { userRechargeAmount :: Int } deriving (Generic, Show) instance ToJSON UserRecharge where toEncoding = genericToEncoding defaultOptions instance FromJSON UserRecharge instance ToSchema UserRecharge data UserTransfer = UserTransfer { userTransferTarget :: Int , userTransferAmount :: Int } deriving (Generic, Show) instance ToJSON UserTransfer where toEncoding = genericToEncoding defaultOptions instance FromJSON UserTransfer instance ToSchema UserTransfer