{-# LANGUAGE TemplateHaskell #-}
module Galley.Effects.MemberStore
(
MemberStore (..),
createMember,
createMembers,
createMembersInRemoteConversation,
createBotMember,
getLocalMember,
getLocalMembers,
getAllLocalMembers,
getRemoteMember,
getRemoteMembers,
checkLocalMemberRemoteConv,
selectRemoteMembers,
getRemoteMembersByDomain,
getLocalMembersByDomain,
setSelfMember,
setOtherMember,
addMLSClients,
planClientRemoval,
removeMLSClients,
removeAllMLSClients,
lookupMLSClients,
lookupMLSClientLeafIndices,
deleteMembers,
deleteMembersInRemoteConversation,
)
where
import Data.Domain
import Data.Id
import Data.Qualified
import Galley.API.MLS.Types
import Galley.Data.Services
import Galley.Types.Conversations.Members
import Galley.Types.ToUserRole
import Galley.Types.UserList
import Imports
import Polysemy
import Wire.API.Conversation.Member hiding (Member)
import Wire.API.MLS.Credential
import Wire.API.MLS.Group
import Wire.API.MLS.LeafNode
import Wire.API.Provider.Service
data MemberStore m a where
CreateMembers :: (ToUserRole u) => ConvId -> UserList u -> MemberStore m ([LocalMember], [RemoteMember])
CreateMembersInRemoteConversation :: Remote ConvId -> [UserId] -> MemberStore m ()
CreateBotMember :: ServiceRef -> BotId -> ConvId -> MemberStore m BotMember
GetLocalMember :: ConvId -> UserId -> MemberStore m (Maybe LocalMember)
GetLocalMembers :: ConvId -> MemberStore m [LocalMember]
GetAllLocalMembers :: MemberStore m [LocalMember]
GetRemoteMember :: ConvId -> Remote UserId -> MemberStore m (Maybe RemoteMember)
GetRemoteMembers :: ConvId -> MemberStore m [RemoteMember]
CheckLocalMemberRemoteConv :: UserId -> Remote ConvId -> MemberStore m Bool
SelectRemoteMembers :: [UserId] -> Remote ConvId -> MemberStore m ([UserId], Bool)
SetSelfMember :: Qualified ConvId -> Local UserId -> MemberUpdate -> MemberStore m ()
SetOtherMember :: Local ConvId -> Qualified UserId -> OtherMemberUpdate -> MemberStore m ()
DeleteMembers :: ConvId -> UserList UserId -> MemberStore m ()
DeleteMembersInRemoteConversation :: Remote ConvId -> [UserId] -> MemberStore m ()
AddMLSClients :: GroupId -> Qualified UserId -> Set (ClientId, LeafIndex) -> MemberStore m ()
PlanClientRemoval :: (Foldable f) => GroupId -> f ClientIdentity -> MemberStore m ()
RemoveMLSClients :: GroupId -> Qualified UserId -> Set ClientId -> MemberStore m ()
RemoveAllMLSClients :: GroupId -> MemberStore m ()
LookupMLSClients :: GroupId -> MemberStore m ClientMap
LookupMLSClientLeafIndices :: GroupId -> MemberStore m (ClientMap, IndexMap)
GetRemoteMembersByDomain :: Domain -> MemberStore m [(ConvId, RemoteMember)]
GetLocalMembersByDomain :: Domain -> MemberStore m [(ConvId, UserId)]
makeSem ''MemberStore
createMember :: (Member MemberStore r) => Local ConvId -> Local UserId -> Sem r [LocalMember]
createMember :: forall (r :: EffectRow).
Member MemberStore r =>
Local ConvId -> Local UserId -> Sem r [LocalMember]
createMember Local ConvId
c Local UserId
u = ([LocalMember], [RemoteMember]) -> [LocalMember]
forall a b. (a, b) -> a
fst (([LocalMember], [RemoteMember]) -> [LocalMember])
-> Sem r ([LocalMember], [RemoteMember]) -> Sem r [LocalMember]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConvId -> UserList UserId -> Sem r ([LocalMember], [RemoteMember])
forall (r :: EffectRow) u.
(Member MemberStore r, ToUserRole u) =>
ConvId -> UserList u -> Sem r ([LocalMember], [RemoteMember])
createMembers (Local ConvId -> ConvId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local ConvId
c) ([UserId] -> [Remote UserId] -> UserList UserId
forall a. [a] -> [Remote a] -> UserList a
UserList [Local UserId -> UserId
forall (t :: QTag) a. QualifiedWithTag t a -> a
tUnqualified Local UserId
u] [])