packages feed

shomei-core-0.2.0.0: src/Shomei/Account/User/Domain.hs

-- | The user entity and its lifecycle status.
module Shomei.Account.User.Domain
  ( UserStatus (..),
    User (..),
    NewUser (..),
  )
where

import Shomei.Account.Email.Domain (Email)
import Shomei.Account.LoginId.Domain (LoginId)
import Shomei.Id (UserId)
import Shomei.Prelude

data UserStatus = UserActive | UserSuspended | UserDeleted
  deriving stock (Generic, Eq, Show)
  deriving anyclass (FromJSON, ToJSON)

data User = User
  { userId :: !UserId,
    loginId :: !LoginId,
    email :: !(Maybe Email),
    displayName :: !(Maybe Text),
    status :: !UserStatus,
    emailVerifiedAt :: !(Maybe UTCTime),
    createdAt :: !UTCTime,
    updatedAt :: !UTCTime
  }
  deriving stock (Generic, Eq, Show)
  deriving anyclass (FromJSON, ToJSON)

data NewUser = NewUser
  { loginId :: !LoginId,
    email :: !(Maybe Email),
    displayName :: !(Maybe Text)
  }
  deriving stock (Generic, Eq, Show)
  deriving anyclass (FromJSON, ToJSON)