{-# LANGUAGE RecordWildCards #-}

module Wire.UserStore.IndexUser where

import Cassandra.Util
import Data.ByteString.Builder
import Data.ByteString.Lazy qualified as LBS
import Data.Handle
import Data.Id
import Data.Json.Util
import Data.Text.Encoding qualified as Text
import Data.Text.Encoding.Error qualified as Text
import Data.Text.ICU.Translit
import Database.CQL.Protocol
import Imports
import SAML2.WebSSO qualified as SAML
import URI.ByteString
import Wire.API.User hiding (userId)
import Wire.API.User.Search
import Wire.UserSearch.Types

type Activated = Bool

data WithWritetime a = WithWriteTime {forall a. WithWritetime a -> a
value :: a, forall a. WithWritetime a -> Writetime a
writetime :: Writetime a}
  deriving (WithWritetime a -> WithWritetime a -> Activated
(WithWritetime a -> WithWritetime a -> Activated)
-> (WithWritetime a -> WithWritetime a -> Activated)
-> Eq (WithWritetime a)
forall a. Eq a => WithWritetime a -> WithWritetime a -> Activated
forall a. (a -> a -> Activated) -> (a -> a -> Activated) -> Eq a
$c== :: forall a. Eq a => WithWritetime a -> WithWritetime a -> Activated
== :: WithWritetime a -> WithWritetime a -> Activated
$c/= :: forall a. Eq a => WithWritetime a -> WithWritetime a -> Activated
/= :: WithWritetime a -> WithWritetime a -> Activated
Eq, Int -> WithWritetime a -> ShowS
[WithWritetime a] -> ShowS
WithWritetime a -> String
(Int -> WithWritetime a -> ShowS)
-> (WithWritetime a -> String)
-> ([WithWritetime a] -> ShowS)
-> Show (WithWritetime a)
forall a. Show a => Int -> WithWritetime a -> ShowS
forall a. Show a => [WithWritetime a] -> ShowS
forall a. Show a => WithWritetime a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> WithWritetime a -> ShowS
showsPrec :: Int -> WithWritetime a -> ShowS
$cshow :: forall a. Show a => WithWritetime a -> String
show :: WithWritetime a -> String
$cshowList :: forall a. Show a => [WithWritetime a] -> ShowS
showList :: [WithWritetime a] -> ShowS
Show)

data IndexUser = IndexUser
  { IndexUser -> UserId
userId :: UserId,
    IndexUser -> Maybe (WithWritetime TeamId)
teamId :: Maybe (WithWritetime TeamId),
    IndexUser -> WithWritetime Name
name :: WithWritetime Name,
    IndexUser -> Maybe (WithWritetime AccountStatus)
accountStatus :: Maybe (WithWritetime AccountStatus),
    IndexUser -> Maybe (WithWritetime Handle)
handle :: Maybe (WithWritetime Handle),
    IndexUser -> Maybe (WithWritetime EmailAddress)
email :: Maybe (WithWritetime EmailAddress),
    IndexUser -> WithWritetime ColourId
colourId :: WithWritetime ColourId,
    IndexUser -> WithWritetime Activated
activated :: WithWritetime Activated,
    IndexUser -> Maybe (WithWritetime ServiceId)
serviceId :: Maybe (WithWritetime ServiceId),
    IndexUser -> Maybe (WithWritetime ManagedBy)
managedBy :: Maybe (WithWritetime ManagedBy),
    IndexUser -> Maybe (WithWritetime UserSSOId)
ssoId :: Maybe (WithWritetime UserSSOId),
    IndexUser -> Maybe (WithWritetime EmailAddress)
unverifiedEmail :: Maybe (WithWritetime EmailAddress),
    IndexUser -> Maybe (Writetime WriteTimeBumper)
writeTimeBumper :: Maybe (Writetime WriteTimeBumper)
  }
  deriving (IndexUser -> IndexUser -> Activated
(IndexUser -> IndexUser -> Activated)
-> (IndexUser -> IndexUser -> Activated) -> Eq IndexUser
forall a. (a -> a -> Activated) -> (a -> a -> Activated) -> Eq a
$c== :: IndexUser -> IndexUser -> Activated
== :: IndexUser -> IndexUser -> Activated
$c/= :: IndexUser -> IndexUser -> Activated
/= :: IndexUser -> IndexUser -> Activated
Eq, Int -> IndexUser -> ShowS
[IndexUser] -> ShowS
IndexUser -> String
(Int -> IndexUser -> ShowS)
-> (IndexUser -> String)
-> ([IndexUser] -> ShowS)
-> Show IndexUser
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IndexUser -> ShowS
showsPrec :: Int -> IndexUser -> ShowS
$cshow :: IndexUser -> String
show :: IndexUser -> String
$cshowList :: [IndexUser] -> ShowS
showList :: [IndexUser] -> ShowS
Show)

{- ORMOLU_DISABLE -}
type instance
  TupleType IndexUser =
    ( UserId,
      Maybe TeamId, Maybe (Writetime TeamId),
      Name, Writetime Name,
      Maybe AccountStatus, Maybe (Writetime AccountStatus),
      Maybe Handle, Maybe (Writetime Handle),
      Maybe EmailAddress, Maybe (Writetime EmailAddress),
      ColourId, Writetime ColourId,
      Activated, Writetime Activated,
      Maybe ServiceId, Maybe (Writetime ServiceId),
      Maybe ManagedBy, Maybe (Writetime ManagedBy),
      Maybe UserSSOId, Maybe (Writetime UserSSOId),
      Maybe EmailAddress, Maybe (Writetime EmailAddress),
      Maybe (Writetime WriteTimeBumper)
    )

instance Record IndexUser where
  asTuple :: IndexUser -> TupleType IndexUser
asTuple (IndexUser {Maybe (Writetime WriteTimeBumper)
Maybe (WithWritetime EmailAddress)
Maybe (WithWritetime ServiceId)
Maybe (WithWritetime TeamId)
Maybe (WithWritetime Handle)
Maybe (WithWritetime ManagedBy)
Maybe (WithWritetime UserSSOId)
Maybe (WithWritetime AccountStatus)
UserId
WithWritetime Activated
WithWritetime ColourId
WithWritetime Name
$sel:userId:IndexUser :: IndexUser -> UserId
$sel:teamId:IndexUser :: IndexUser -> Maybe (WithWritetime TeamId)
$sel:name:IndexUser :: IndexUser -> WithWritetime Name
$sel:accountStatus:IndexUser :: IndexUser -> Maybe (WithWritetime AccountStatus)
$sel:handle:IndexUser :: IndexUser -> Maybe (WithWritetime Handle)
$sel:email:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:colourId:IndexUser :: IndexUser -> WithWritetime ColourId
$sel:activated:IndexUser :: IndexUser -> WithWritetime Activated
$sel:serviceId:IndexUser :: IndexUser -> Maybe (WithWritetime ServiceId)
$sel:managedBy:IndexUser :: IndexUser -> Maybe (WithWritetime ManagedBy)
$sel:ssoId:IndexUser :: IndexUser -> Maybe (WithWritetime UserSSOId)
$sel:unverifiedEmail:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:writeTimeBumper:IndexUser :: IndexUser -> Maybe (Writetime WriteTimeBumper)
userId :: UserId
teamId :: Maybe (WithWritetime TeamId)
name :: WithWritetime Name
accountStatus :: Maybe (WithWritetime AccountStatus)
handle :: Maybe (WithWritetime Handle)
email :: Maybe (WithWritetime EmailAddress)
colourId :: WithWritetime ColourId
activated :: WithWritetime Activated
serviceId :: Maybe (WithWritetime ServiceId)
managedBy :: Maybe (WithWritetime ManagedBy)
ssoId :: Maybe (WithWritetime UserSSOId)
unverifiedEmail :: Maybe (WithWritetime EmailAddress)
writeTimeBumper :: Maybe (Writetime WriteTimeBumper)
..}) =
    ( UserId
userId,
      WithWritetime TeamId -> TeamId
forall a. WithWritetime a -> a
value (WithWritetime TeamId -> TeamId)
-> Maybe (WithWritetime TeamId) -> Maybe TeamId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime TeamId)
teamId, WithWritetime TeamId -> Writetime TeamId
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime TeamId -> Writetime TeamId)
-> Maybe (WithWritetime TeamId) -> Maybe (Writetime TeamId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime TeamId)
teamId,
      WithWritetime Name
name.value, WithWritetime Name
name.writetime,
      WithWritetime AccountStatus -> AccountStatus
forall a. WithWritetime a -> a
value (WithWritetime AccountStatus -> AccountStatus)
-> Maybe (WithWritetime AccountStatus) -> Maybe AccountStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime AccountStatus)
accountStatus, WithWritetime AccountStatus -> Writetime AccountStatus
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime AccountStatus -> Writetime AccountStatus)
-> Maybe (WithWritetime AccountStatus)
-> Maybe (Writetime AccountStatus)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime AccountStatus)
accountStatus,
      WithWritetime Handle -> Handle
forall a. WithWritetime a -> a
value (WithWritetime Handle -> Handle)
-> Maybe (WithWritetime Handle) -> Maybe Handle
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime Handle)
handle, WithWritetime Handle -> Writetime Handle
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime Handle -> Writetime Handle)
-> Maybe (WithWritetime Handle) -> Maybe (Writetime Handle)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime Handle)
handle,
      WithWritetime EmailAddress -> EmailAddress
forall a. WithWritetime a -> a
value (WithWritetime EmailAddress -> EmailAddress)
-> Maybe (WithWritetime EmailAddress) -> Maybe EmailAddress
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
email, WithWritetime EmailAddress -> Writetime EmailAddress
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime EmailAddress -> Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
email,
      WithWritetime ColourId
colourId.value, WithWritetime ColourId
colourId.writetime,
      WithWritetime Activated
activated.value, WithWritetime Activated
activated.writetime,
      WithWritetime ServiceId -> ServiceId
forall a. WithWritetime a -> a
value (WithWritetime ServiceId -> ServiceId)
-> Maybe (WithWritetime ServiceId) -> Maybe ServiceId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ServiceId)
serviceId, WithWritetime ServiceId -> Writetime ServiceId
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime ServiceId -> Writetime ServiceId)
-> Maybe (WithWritetime ServiceId) -> Maybe (Writetime ServiceId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ServiceId)
serviceId,
      WithWritetime ManagedBy -> ManagedBy
forall a. WithWritetime a -> a
value (WithWritetime ManagedBy -> ManagedBy)
-> Maybe (WithWritetime ManagedBy) -> Maybe ManagedBy
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ManagedBy)
managedBy, WithWritetime ManagedBy -> Writetime ManagedBy
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime ManagedBy -> Writetime ManagedBy)
-> Maybe (WithWritetime ManagedBy) -> Maybe (Writetime ManagedBy)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ManagedBy)
managedBy,
      WithWritetime UserSSOId -> UserSSOId
forall a. WithWritetime a -> a
value (WithWritetime UserSSOId -> UserSSOId)
-> Maybe (WithWritetime UserSSOId) -> Maybe UserSSOId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime UserSSOId)
ssoId, WithWritetime UserSSOId -> Writetime UserSSOId
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime UserSSOId -> Writetime UserSSOId)
-> Maybe (WithWritetime UserSSOId) -> Maybe (Writetime UserSSOId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime UserSSOId)
ssoId,
      WithWritetime EmailAddress -> EmailAddress
forall a. WithWritetime a -> a
value (WithWritetime EmailAddress -> EmailAddress)
-> Maybe (WithWritetime EmailAddress) -> Maybe EmailAddress
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
unverifiedEmail, WithWritetime EmailAddress -> Writetime EmailAddress
forall a. WithWritetime a -> Writetime a
writetime (WithWritetime EmailAddress -> Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
unverifiedEmail,
      Maybe (Writetime WriteTimeBumper)
writeTimeBumper
    )

  asRecord :: TupleType IndexUser -> IndexUser
asRecord
    ( UserId
u,
      Maybe TeamId
mTeam, Maybe (Writetime TeamId)
tTeam,
      Name
name, Writetime Name
tName,
      Maybe AccountStatus
status, Maybe (Writetime AccountStatus)
tStatus,
      Maybe Handle
handle, Maybe (Writetime Handle)
tHandle,
      Maybe EmailAddress
email, Maybe (Writetime EmailAddress)
tEmail,
      ColourId
colour, Writetime ColourId
tColour,
      Activated
activated, Writetime Activated
tActivated,
      Maybe ServiceId
service, Maybe (Writetime ServiceId)
tService,
      Maybe ManagedBy
managedBy, Maybe (Writetime ManagedBy)
tManagedBy,
      Maybe UserSSOId
ssoId, Maybe (Writetime UserSSOId)
tSsoId,
      Maybe EmailAddress
emailUnvalidated, Maybe (Writetime EmailAddress)
tEmailUnvalidated,
      Maybe (Writetime WriteTimeBumper)
tWriteTimeBumper
    ) = IndexUser {
          $sel:userId:IndexUser :: UserId
userId = UserId
u,
          $sel:teamId:IndexUser :: Maybe (WithWritetime TeamId)
teamId =  TeamId -> Writetime TeamId -> WithWritetime TeamId
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (TeamId -> Writetime TeamId -> WithWritetime TeamId)
-> Maybe TeamId -> Maybe (Writetime TeamId -> WithWritetime TeamId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe TeamId
mTeam Maybe (Writetime TeamId -> WithWritetime TeamId)
-> Maybe (Writetime TeamId) -> Maybe (WithWritetime TeamId)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime TeamId)
tTeam,
          $sel:name:IndexUser :: WithWritetime Name
name = Name -> Writetime Name -> WithWritetime Name
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime Name
name Writetime Name
tName,
          $sel:accountStatus:IndexUser :: Maybe (WithWritetime AccountStatus)
accountStatus = AccountStatus
-> Writetime AccountStatus -> WithWritetime AccountStatus
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (AccountStatus
 -> Writetime AccountStatus -> WithWritetime AccountStatus)
-> Maybe AccountStatus
-> Maybe (Writetime AccountStatus -> WithWritetime AccountStatus)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe AccountStatus
status Maybe (Writetime AccountStatus -> WithWritetime AccountStatus)
-> Maybe (Writetime AccountStatus)
-> Maybe (WithWritetime AccountStatus)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime AccountStatus)
tStatus,
          $sel:handle:IndexUser :: Maybe (WithWritetime Handle)
handle = Handle -> Writetime Handle -> WithWritetime Handle
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (Handle -> Writetime Handle -> WithWritetime Handle)
-> Maybe Handle -> Maybe (Writetime Handle -> WithWritetime Handle)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe Handle
handle Maybe (Writetime Handle -> WithWritetime Handle)
-> Maybe (Writetime Handle) -> Maybe (WithWritetime Handle)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime Handle)
tHandle,
          $sel:email:IndexUser :: Maybe (WithWritetime EmailAddress)
email = EmailAddress
-> Writetime EmailAddress -> WithWritetime EmailAddress
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (EmailAddress
 -> Writetime EmailAddress -> WithWritetime EmailAddress)
-> Maybe EmailAddress
-> Maybe (Writetime EmailAddress -> WithWritetime EmailAddress)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe EmailAddress
email Maybe (Writetime EmailAddress -> WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime EmailAddress)
tEmail,
          $sel:colourId:IndexUser :: WithWritetime ColourId
colourId = ColourId -> Writetime ColourId -> WithWritetime ColourId
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime ColourId
colour Writetime ColourId
tColour,
          $sel:activated:IndexUser :: WithWritetime Activated
activated = Activated -> Writetime Activated -> WithWritetime Activated
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime Activated
activated Writetime Activated
tActivated,
          $sel:serviceId:IndexUser :: Maybe (WithWritetime ServiceId)
serviceId = ServiceId -> Writetime ServiceId -> WithWritetime ServiceId
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (ServiceId -> Writetime ServiceId -> WithWritetime ServiceId)
-> Maybe ServiceId
-> Maybe (Writetime ServiceId -> WithWritetime ServiceId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ServiceId
service Maybe (Writetime ServiceId -> WithWritetime ServiceId)
-> Maybe (Writetime ServiceId) -> Maybe (WithWritetime ServiceId)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime ServiceId)
tService,
          $sel:managedBy:IndexUser :: Maybe (WithWritetime ManagedBy)
managedBy = ManagedBy -> Writetime ManagedBy -> WithWritetime ManagedBy
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (ManagedBy -> Writetime ManagedBy -> WithWritetime ManagedBy)
-> Maybe ManagedBy
-> Maybe (Writetime ManagedBy -> WithWritetime ManagedBy)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe ManagedBy
managedBy Maybe (Writetime ManagedBy -> WithWritetime ManagedBy)
-> Maybe (Writetime ManagedBy) -> Maybe (WithWritetime ManagedBy)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime ManagedBy)
tManagedBy,
          $sel:ssoId:IndexUser :: Maybe (WithWritetime UserSSOId)
ssoId = UserSSOId -> Writetime UserSSOId -> WithWritetime UserSSOId
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (UserSSOId -> Writetime UserSSOId -> WithWritetime UserSSOId)
-> Maybe UserSSOId
-> Maybe (Writetime UserSSOId -> WithWritetime UserSSOId)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe UserSSOId
ssoId Maybe (Writetime UserSSOId -> WithWritetime UserSSOId)
-> Maybe (Writetime UserSSOId) -> Maybe (WithWritetime UserSSOId)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime UserSSOId)
tSsoId,
          $sel:unverifiedEmail:IndexUser :: Maybe (WithWritetime EmailAddress)
unverifiedEmail = EmailAddress
-> Writetime EmailAddress -> WithWritetime EmailAddress
forall a. a -> Writetime a -> WithWritetime a
WithWriteTime (EmailAddress
 -> Writetime EmailAddress -> WithWritetime EmailAddress)
-> Maybe EmailAddress
-> Maybe (Writetime EmailAddress -> WithWritetime EmailAddress)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe EmailAddress
emailUnvalidated Maybe (Writetime EmailAddress -> WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Writetime EmailAddress)
tEmailUnvalidated,
          $sel:writeTimeBumper:IndexUser :: Maybe (Writetime WriteTimeBumper)
writeTimeBumper = Maybe (Writetime WriteTimeBumper)
tWriteTimeBumper
        }
{- ORMOLU_ENABLE -}

indexUserToVersion :: IndexUser -> IndexVersion
indexUserToVersion :: IndexUser -> IndexVersion
indexUserToVersion IndexUser {Maybe (Writetime WriteTimeBumper)
Maybe (WithWritetime EmailAddress)
Maybe (WithWritetime ServiceId)
Maybe (WithWritetime TeamId)
Maybe (WithWritetime Handle)
Maybe (WithWritetime ManagedBy)
Maybe (WithWritetime UserSSOId)
Maybe (WithWritetime AccountStatus)
UserId
WithWritetime Activated
WithWritetime ColourId
WithWritetime Name
$sel:userId:IndexUser :: IndexUser -> UserId
$sel:teamId:IndexUser :: IndexUser -> Maybe (WithWritetime TeamId)
$sel:name:IndexUser :: IndexUser -> WithWritetime Name
$sel:accountStatus:IndexUser :: IndexUser -> Maybe (WithWritetime AccountStatus)
$sel:handle:IndexUser :: IndexUser -> Maybe (WithWritetime Handle)
$sel:email:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:colourId:IndexUser :: IndexUser -> WithWritetime ColourId
$sel:activated:IndexUser :: IndexUser -> WithWritetime Activated
$sel:serviceId:IndexUser :: IndexUser -> Maybe (WithWritetime ServiceId)
$sel:managedBy:IndexUser :: IndexUser -> Maybe (WithWritetime ManagedBy)
$sel:ssoId:IndexUser :: IndexUser -> Maybe (WithWritetime UserSSOId)
$sel:unverifiedEmail:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:writeTimeBumper:IndexUser :: IndexUser -> Maybe (Writetime WriteTimeBumper)
userId :: UserId
teamId :: Maybe (WithWritetime TeamId)
name :: WithWritetime Name
accountStatus :: Maybe (WithWritetime AccountStatus)
handle :: Maybe (WithWritetime Handle)
email :: Maybe (WithWritetime EmailAddress)
colourId :: WithWritetime ColourId
activated :: WithWritetime Activated
serviceId :: Maybe (WithWritetime ServiceId)
managedBy :: Maybe (WithWritetime ManagedBy)
ssoId :: Maybe (WithWritetime UserSSOId)
unverifiedEmail :: Maybe (WithWritetime EmailAddress)
writeTimeBumper :: Maybe (Writetime WriteTimeBumper)
..} =
  [Maybe (Writetime ())] -> IndexVersion
forall {k} (x :: k). [Maybe (Writetime x)] -> IndexVersion
mkIndexVersion
    [ () -> Name -> ()
forall a b. a -> b -> a
const () (Name -> ()) -> Maybe (Writetime Name) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Writetime Name -> Maybe (Writetime Name)
forall a. a -> Maybe a
Just WithWritetime Name
name.writetime,
      () -> TeamId -> ()
forall a b. a -> b -> a
const () (TeamId -> ()) -> Maybe (Writetime TeamId) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime TeamId -> Writetime TeamId)
-> Maybe (WithWritetime TeamId) -> Maybe (Writetime TeamId)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime TeamId -> Writetime TeamId
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime TeamId)
teamId,
      () -> AccountStatus -> ()
forall a b. a -> b -> a
const () (AccountStatus -> ())
-> Maybe (Writetime AccountStatus) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime AccountStatus -> Writetime AccountStatus)
-> Maybe (WithWritetime AccountStatus)
-> Maybe (Writetime AccountStatus)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime AccountStatus -> Writetime AccountStatus
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime AccountStatus)
accountStatus,
      () -> Handle -> ()
forall a b. a -> b -> a
const () (Handle -> ()) -> Maybe (Writetime Handle) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime Handle -> Writetime Handle)
-> Maybe (WithWritetime Handle) -> Maybe (Writetime Handle)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime Handle -> Writetime Handle
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime Handle)
handle,
      () -> EmailAddress -> ()
forall a b. a -> b -> a
const () (EmailAddress -> ())
-> Maybe (Writetime EmailAddress) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime EmailAddress -> Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime EmailAddress -> Writetime EmailAddress
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime EmailAddress)
email,
      () -> ColourId -> ()
forall a b. a -> b -> a
const () (ColourId -> ())
-> Maybe (Writetime ColourId) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Writetime ColourId -> Maybe (Writetime ColourId)
forall a. a -> Maybe a
Just WithWritetime ColourId
colourId.writetime,
      () -> Activated -> ()
forall a b. a -> b -> a
const () (Activated -> ())
-> Maybe (Writetime Activated) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Writetime Activated -> Maybe (Writetime Activated)
forall a. a -> Maybe a
Just WithWritetime Activated
activated.writetime,
      () -> ServiceId -> ()
forall a b. a -> b -> a
const () (ServiceId -> ())
-> Maybe (Writetime ServiceId) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime ServiceId -> Writetime ServiceId)
-> Maybe (WithWritetime ServiceId) -> Maybe (Writetime ServiceId)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime ServiceId -> Writetime ServiceId
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime ServiceId)
serviceId,
      () -> ManagedBy -> ()
forall a b. a -> b -> a
const () (ManagedBy -> ())
-> Maybe (Writetime ManagedBy) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime ManagedBy -> Writetime ManagedBy)
-> Maybe (WithWritetime ManagedBy) -> Maybe (Writetime ManagedBy)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime ManagedBy -> Writetime ManagedBy
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime ManagedBy)
managedBy,
      () -> UserSSOId -> ()
forall a b. a -> b -> a
const () (UserSSOId -> ())
-> Maybe (Writetime UserSSOId) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime UserSSOId -> Writetime UserSSOId)
-> Maybe (WithWritetime UserSSOId) -> Maybe (Writetime UserSSOId)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime UserSSOId -> Writetime UserSSOId
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime UserSSOId)
ssoId,
      () -> EmailAddress -> ()
forall a b. a -> b -> a
const () (EmailAddress -> ())
-> Maybe (Writetime EmailAddress) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> (WithWritetime EmailAddress -> Writetime EmailAddress)
-> Maybe (WithWritetime EmailAddress)
-> Maybe (Writetime EmailAddress)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap WithWritetime EmailAddress -> Writetime EmailAddress
forall a. WithWritetime a -> Writetime a
writetime Maybe (WithWritetime EmailAddress)
unverifiedEmail,
      () -> WriteTimeBumper -> ()
forall a b. a -> b -> a
const () (WriteTimeBumper -> ())
-> Maybe (Writetime WriteTimeBumper) -> Maybe (Writetime ())
forall (f :: * -> *) (g :: * -> *) a b.
(Functor f, Functor g) =>
(a -> b) -> f (g a) -> f (g b)
<$$> Maybe (Writetime WriteTimeBumper)
writeTimeBumper
    ]

indexUserToDoc :: SearchVisibilityInbound -> IndexUser -> UserDoc
indexUserToDoc :: SearchVisibilityInbound -> IndexUser -> UserDoc
indexUserToDoc SearchVisibilityInbound
searchVisInbound IndexUser {Maybe (Writetime WriteTimeBumper)
Maybe (WithWritetime EmailAddress)
Maybe (WithWritetime ServiceId)
Maybe (WithWritetime TeamId)
Maybe (WithWritetime Handle)
Maybe (WithWritetime ManagedBy)
Maybe (WithWritetime UserSSOId)
Maybe (WithWritetime AccountStatus)
UserId
WithWritetime Activated
WithWritetime ColourId
WithWritetime Name
$sel:userId:IndexUser :: IndexUser -> UserId
$sel:teamId:IndexUser :: IndexUser -> Maybe (WithWritetime TeamId)
$sel:name:IndexUser :: IndexUser -> WithWritetime Name
$sel:accountStatus:IndexUser :: IndexUser -> Maybe (WithWritetime AccountStatus)
$sel:handle:IndexUser :: IndexUser -> Maybe (WithWritetime Handle)
$sel:email:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:colourId:IndexUser :: IndexUser -> WithWritetime ColourId
$sel:activated:IndexUser :: IndexUser -> WithWritetime Activated
$sel:serviceId:IndexUser :: IndexUser -> Maybe (WithWritetime ServiceId)
$sel:managedBy:IndexUser :: IndexUser -> Maybe (WithWritetime ManagedBy)
$sel:ssoId:IndexUser :: IndexUser -> Maybe (WithWritetime UserSSOId)
$sel:unverifiedEmail:IndexUser :: IndexUser -> Maybe (WithWritetime EmailAddress)
$sel:writeTimeBumper:IndexUser :: IndexUser -> Maybe (Writetime WriteTimeBumper)
userId :: UserId
teamId :: Maybe (WithWritetime TeamId)
name :: WithWritetime Name
accountStatus :: Maybe (WithWritetime AccountStatus)
handle :: Maybe (WithWritetime Handle)
email :: Maybe (WithWritetime EmailAddress)
colourId :: WithWritetime ColourId
activated :: WithWritetime Activated
serviceId :: Maybe (WithWritetime ServiceId)
managedBy :: Maybe (WithWritetime ManagedBy)
ssoId :: Maybe (WithWritetime UserSSOId)
unverifiedEmail :: Maybe (WithWritetime EmailAddress)
writeTimeBumper :: Maybe (Writetime WriteTimeBumper)
..} =
  if Activated
shouldIndex
    then
      UserDoc
        { $sel:udEmailUnvalidated:UserDoc :: Maybe EmailAddress
udEmailUnvalidated = WithWritetime EmailAddress -> EmailAddress
forall a. WithWritetime a -> a
value (WithWritetime EmailAddress -> EmailAddress)
-> Maybe (WithWritetime EmailAddress) -> Maybe EmailAddress
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
unverifiedEmail,
          $sel:udSso:UserDoc :: Maybe Sso
udSso = UserSSOId -> Maybe Sso
sso (UserSSOId -> Maybe Sso)
-> (WithWritetime UserSSOId -> UserSSOId)
-> WithWritetime UserSSOId
-> Maybe Sso
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WithWritetime UserSSOId -> UserSSOId
forall a. WithWritetime a -> a
value (WithWritetime UserSSOId -> Maybe Sso)
-> Maybe (WithWritetime UserSSOId) -> Maybe Sso
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Maybe (WithWritetime UserSSOId)
ssoId,
          $sel:udScimExternalId:UserDoc :: Maybe Text
udScimExternalId = Maybe (Maybe Text) -> Maybe Text
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Maybe (Maybe Text) -> Maybe Text)
-> Maybe (Maybe Text) -> Maybe Text
forall a b. (a -> b) -> a -> b
$ ManagedBy -> UserSSOId -> Maybe Text
scimExternalId (ManagedBy -> UserSSOId -> Maybe Text)
-> Maybe ManagedBy -> Maybe (UserSSOId -> Maybe Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (WithWritetime ManagedBy -> ManagedBy
forall a. WithWritetime a -> a
value (WithWritetime ManagedBy -> ManagedBy)
-> Maybe (WithWritetime ManagedBy) -> Maybe ManagedBy
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ManagedBy)
managedBy) Maybe (UserSSOId -> Maybe Text)
-> Maybe UserSSOId -> Maybe (Maybe Text)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (WithWritetime UserSSOId -> UserSSOId
forall a. WithWritetime a -> a
value (WithWritetime UserSSOId -> UserSSOId)
-> Maybe (WithWritetime UserSSOId) -> Maybe UserSSOId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime UserSSOId)
ssoId),
          $sel:udSearchVisibilityInbound:UserDoc :: Maybe SearchVisibilityInbound
udSearchVisibilityInbound = SearchVisibilityInbound -> Maybe SearchVisibilityInbound
forall a. a -> Maybe a
Just SearchVisibilityInbound
searchVisInbound,
          -- FUTUREWORK: This is a bug: https://wearezeta.atlassian.net/browse/WPB-11124
          $sel:udRole:UserDoc :: Maybe Role
udRole = Maybe Role
forall a. Maybe a
Nothing,
          $sel:udCreatedAt:UserDoc :: Maybe UTCTimeMillis
udCreatedAt = UTCTimeMillis -> Maybe UTCTimeMillis
forall a. a -> Maybe a
Just (UTCTimeMillis -> Maybe UTCTimeMillis)
-> (UTCTime -> UTCTimeMillis) -> UTCTime -> Maybe UTCTimeMillis
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> UTCTimeMillis
toUTCTimeMillis (UTCTime -> Maybe UTCTimeMillis) -> UTCTime -> Maybe UTCTimeMillis
forall a b. (a -> b) -> a -> b
$ Writetime Activated -> UTCTime
forall {k} (a :: k). Writetime a -> UTCTime
writetimeToUTC WithWritetime Activated
activated.writetime,
          $sel:udManagedBy:UserDoc :: Maybe ManagedBy
udManagedBy = WithWritetime ManagedBy -> ManagedBy
forall a. WithWritetime a -> a
value (WithWritetime ManagedBy -> ManagedBy)
-> Maybe (WithWritetime ManagedBy) -> Maybe ManagedBy
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime ManagedBy)
managedBy,
          $sel:udSAMLIdP:UserDoc :: Maybe Text
udSAMLIdP = UserSSOId -> Maybe Text
idpUrl (UserSSOId -> Maybe Text)
-> (WithWritetime UserSSOId -> UserSSOId)
-> WithWritetime UserSSOId
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WithWritetime UserSSOId -> UserSSOId
forall a. WithWritetime a -> a
value (WithWritetime UserSSOId -> Maybe Text)
-> Maybe (WithWritetime UserSSOId) -> Maybe Text
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Maybe (WithWritetime UserSSOId)
ssoId,
          $sel:udAccountStatus:UserDoc :: Maybe AccountStatus
udAccountStatus = WithWritetime AccountStatus -> AccountStatus
forall a. WithWritetime a -> a
value (WithWritetime AccountStatus -> AccountStatus)
-> Maybe (WithWritetime AccountStatus) -> Maybe AccountStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime AccountStatus)
accountStatus,
          $sel:udColourId:UserDoc :: Maybe ColourId
udColourId = ColourId -> Maybe ColourId
forall a. a -> Maybe a
Just WithWritetime ColourId
colourId.value,
          $sel:udEmail:UserDoc :: Maybe EmailAddress
udEmail = WithWritetime EmailAddress -> EmailAddress
forall a. WithWritetime a -> a
value (WithWritetime EmailAddress -> EmailAddress)
-> Maybe (WithWritetime EmailAddress) -> Maybe EmailAddress
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime EmailAddress)
email,
          $sel:udHandle:UserDoc :: Maybe Handle
udHandle = WithWritetime Handle -> Handle
forall a. WithWritetime a -> a
value (WithWritetime Handle -> Handle)
-> Maybe (WithWritetime Handle) -> Maybe Handle
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime Handle)
handle,
          $sel:udNormalized:UserDoc :: Maybe Text
udNormalized = Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
normalized WithWritetime Name
name.value.fromName,
          $sel:udName:UserDoc :: Maybe Name
udName = Name -> Maybe Name
forall a. a -> Maybe a
Just WithWritetime Name
name.value,
          $sel:udTeam:UserDoc :: Maybe TeamId
udTeam = WithWritetime TeamId -> TeamId
forall a. WithWritetime a -> a
value (WithWritetime TeamId -> TeamId)
-> Maybe (WithWritetime TeamId) -> Maybe TeamId
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime TeamId)
teamId,
          $sel:udId:UserDoc :: UserId
udId = UserId
userId
        }
    else -- We insert a tombstone-style user here, as it's easier than
    -- deleting the old one. It's mostly empty, but having the status here
    -- might be useful in the future.
      UserId -> UserDoc
emptyUserDoc UserId
userId
  where
    shouldIndex :: Activated
shouldIndex =
      ( case WithWritetime AccountStatus -> AccountStatus
forall a. WithWritetime a -> a
value (WithWritetime AccountStatus -> AccountStatus)
-> Maybe (WithWritetime AccountStatus) -> Maybe AccountStatus
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (WithWritetime AccountStatus)
accountStatus of
          Maybe AccountStatus
Nothing -> Activated
True
          Just AccountStatus
Active -> Activated
True
          Just AccountStatus
Suspended -> Activated
True
          Just AccountStatus
Deleted -> Activated
False
          Just AccountStatus
Ephemeral -> Activated
False
          Just AccountStatus
PendingInvitation -> Activated
False
      )
        Activated -> Activated -> Activated
&& WithWritetime Activated
activated.value -- FUTUREWORK: how is this adding to the first case?
        Activated -> Activated -> Activated
&& Maybe (WithWritetime ServiceId) -> Activated
forall a. Maybe a -> Activated
isNothing Maybe (WithWritetime ServiceId)
serviceId

    idpUrl :: UserSSOId -> Maybe Text
    idpUrl :: UserSSOId -> Maybe Text
idpUrl (UserSSOId (SAML.UserRef (SAML.Issuer URI
uri) NameID
_subject)) =
      Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ URI -> Text
fromUri URI
uri
    idpUrl (UserScimExternalId Text
_) = Maybe Text
forall a. Maybe a
Nothing

    fromUri :: URI -> Text
    fromUri :: URI -> Text
fromUri =
      OnDecodeError -> ByteString -> Text
Text.decodeUtf8With OnDecodeError
Text.lenientDecode
        (ByteString -> Text) -> (URI -> ByteString) -> URI -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
LBS.toStrict
        (ByteString -> ByteString)
-> (URI -> ByteString) -> URI -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> ByteString
toLazyByteString
        (Builder -> ByteString) -> (URI -> Builder) -> URI -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. URI -> Builder
forall a. URIRef a -> Builder
serializeURIRef

    sso :: UserSSOId -> Maybe Sso
    sso :: UserSSOId -> Maybe Sso
sso UserSSOId
userSsoId = do
      (Text
issuer, Text
nameid) <- UserSSOId -> Maybe (Text, Text)
ssoIssuerAndNameId UserSSOId
userSsoId
      Sso -> Maybe Sso
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Sso -> Maybe Sso) -> Sso -> Maybe Sso
forall a b. (a -> b) -> a -> b
$ Sso {$sel:ssoIssuer:Sso :: Text
ssoIssuer = Text
issuer, $sel:ssoNameId:Sso :: Text
ssoNameId = Text
nameid}

-- Transliteration could also be done by ElasticSearch (ICU plugin), but this would
-- require a data migration.
normalized :: Text -> Text
normalized :: Text -> Text
normalized = Transliterator -> Text -> Text
transliterate (Text -> Transliterator
trans Text
"Any-Latin; Latin-ASCII; Lower")

emptyUserDoc :: UserId -> UserDoc
emptyUserDoc :: UserId -> UserDoc
emptyUserDoc UserId
uid =
  UserDoc
    { $sel:udEmailUnvalidated:UserDoc :: Maybe EmailAddress
udEmailUnvalidated = Maybe EmailAddress
forall a. Maybe a
Nothing,
      $sel:udSso:UserDoc :: Maybe Sso
udSso = Maybe Sso
forall a. Maybe a
Nothing,
      $sel:udScimExternalId:UserDoc :: Maybe Text
udScimExternalId = Maybe Text
forall a. Maybe a
Nothing,
      $sel:udSearchVisibilityInbound:UserDoc :: Maybe SearchVisibilityInbound
udSearchVisibilityInbound = Maybe SearchVisibilityInbound
forall a. Maybe a
Nothing,
      $sel:udRole:UserDoc :: Maybe Role
udRole = Maybe Role
forall a. Maybe a
Nothing,
      $sel:udCreatedAt:UserDoc :: Maybe UTCTimeMillis
udCreatedAt = Maybe UTCTimeMillis
forall a. Maybe a
Nothing,
      $sel:udManagedBy:UserDoc :: Maybe ManagedBy
udManagedBy = Maybe ManagedBy
forall a. Maybe a
Nothing,
      $sel:udSAMLIdP:UserDoc :: Maybe Text
udSAMLIdP = Maybe Text
forall a. Maybe a
Nothing,
      $sel:udAccountStatus:UserDoc :: Maybe AccountStatus
udAccountStatus = Maybe AccountStatus
forall a. Maybe a
Nothing,
      $sel:udColourId:UserDoc :: Maybe ColourId
udColourId = Maybe ColourId
forall a. Maybe a
Nothing,
      $sel:udEmail:UserDoc :: Maybe EmailAddress
udEmail = Maybe EmailAddress
forall a. Maybe a
Nothing,
      $sel:udHandle:UserDoc :: Maybe Handle
udHandle = Maybe Handle
forall a. Maybe a
Nothing,
      $sel:udNormalized:UserDoc :: Maybe Text
udNormalized = Maybe Text
forall a. Maybe a
Nothing,
      $sel:udName:UserDoc :: Maybe Name
udName = Maybe Name
forall a. Maybe a
Nothing,
      $sel:udTeam:UserDoc :: Maybe TeamId
udTeam = Maybe TeamId
forall a. Maybe a
Nothing,
      $sel:udId:UserDoc :: UserId
udId = UserId
uid
    }