{-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoFieldSelectors #-} module WikiMusic.Interaction.Auth ( fetchMeAction, ) where import WikiMusic.Free.AuthQuery import WikiMusic.Interaction.Model.Auth import WikiMusic.Protolude import WikiMusic.Sqlite.AuthQuery () fetchMeAction :: (AuthQuery :<: f) => Env -> UUID -> Free f (Maybe GetMeQueryResponse) fetchMeAction :: forall (f :: * -> *). (AuthQuery :<: f) => Env -> UUID -> Free f (Maybe GetMeQueryResponse) fetchMeAction Env env UUID identifier = do Either AuthQueryError (Maybe WikiMusicUser) maybeUserOrErr <- Env -> UUID -> Free f (Either AuthQueryError (Maybe WikiMusicUser)) forall (f :: * -> *). (AuthQuery :<: f) => Env -> UUID -> Free f (Either AuthQueryError (Maybe WikiMusicUser)) fetchMe Env env UUID identifier case Either AuthQueryError (Maybe WikiMusicUser) maybeUserOrErr of Left AuthQueryError _ -> do Maybe GetMeQueryResponse -> Free f (Maybe GetMeQueryResponse) forall a. a -> Free f a forall (f :: * -> *) a. Applicative f => a -> f a pure Maybe GetMeQueryResponse forall a. Maybe a Nothing Right Maybe WikiMusicUser maybeWikiMusicUser -> do Maybe GetMeQueryResponse -> Free f (Maybe GetMeQueryResponse) forall a. a -> Free f a forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe GetMeQueryResponse -> Free f (Maybe GetMeQueryResponse)) -> Maybe GetMeQueryResponse -> Free f (Maybe GetMeQueryResponse) forall a b. (a -> b) -> a -> b $ WikiMusicUser -> GetMeQueryResponse forall {k} {k} {k} {k} {s}. (Is k A_Getter, Is k A_Getter, Is k A_Getter, Is k A_Getter, LabelOptic "identifier" k s s UUID UUID, LabelOptic "displayName" k s s Text Text, LabelOptic "emailAddress" k s s Text Text, LabelOptic "roles" k s s [UserRole] [UserRole]) => s -> GetMeQueryResponse userToResponse (WikiMusicUser -> GetMeQueryResponse) -> Maybe WikiMusicUser -> Maybe GetMeQueryResponse forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Maybe WikiMusicUser maybeWikiMusicUser where userToResponse :: s -> GetMeQueryResponse userToResponse s x = GetMeQueryResponse { $sel:identifier:GetMeQueryResponse :: UUID identifier = s x s -> Optic' k NoIx s UUID -> UUID forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' k NoIx s UUID #identifier, $sel:displayName:GetMeQueryResponse :: Text displayName = s x s -> Optic' k NoIx s Text -> Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' k NoIx s Text #displayName, $sel:emailAddress:GetMeQueryResponse :: Text emailAddress = s x s -> Optic' k NoIx s Text -> Text forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' k NoIx s Text #emailAddress, $sel:roles:GetMeQueryResponse :: [UserRole] roles = s x s -> Optic' k NoIx s [UserRole] -> [UserRole] forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' k NoIx s [UserRole] #roles }