{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoFieldSelectors #-} module WikiMusic.Servant.AuthRoutes ( fetchMeRoute, ) where import Servant import WikiMusic.Free.AuthQuery import WikiMusic.Interaction.Auth import WikiMusic.Interaction.Model.Auth import WikiMusic.Model.Env import WikiMusic.Protolude import WikiMusic.Servant.Utilities import WikiMusic.Sqlite.AuthQuery () fetchMeRoute :: Env -> Maybe Text -> Handler GetMeQueryResponse fetchMeRoute :: Env -> Maybe Text -> Handler GetMeQueryResponse fetchMeRoute Env env Maybe Text authToken = do Env -> Maybe Text -> (WikiMusicUser -> Handler GetMeQueryResponse) -> Handler GetMeQueryResponse forall a. Env -> Maybe Text -> (WikiMusicUser -> Handler a) -> Handler a doWithAuth Env env Maybe Text authToken ( \WikiMusicUser authUser -> do Maybe GetMeQueryResponse maybeUser <- IO (Maybe GetMeQueryResponse) -> Handler (Maybe GetMeQueryResponse) forall a. IO a -> Handler a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (forall (f :: * -> *) a. Exec f => Free f a -> IO a exec @AuthQuery (Free AuthQuery (Maybe GetMeQueryResponse) -> IO (Maybe GetMeQueryResponse)) -> Free AuthQuery (Maybe GetMeQueryResponse) -> IO (Maybe GetMeQueryResponse) forall a b. (a -> b) -> a -> b $ Env -> UUID -> Free AuthQuery (Maybe GetMeQueryResponse) forall (f :: * -> *). (AuthQuery :<: f) => Env -> UUID -> Free f (Maybe GetMeQueryResponse) fetchMeAction Env env (WikiMusicUser authUser WikiMusicUser -> Optic' A_Lens NoIx WikiMusicUser UUID -> UUID forall k s (is :: IxList) a. Is k A_Getter => s -> Optic' k is s a -> a ^. Optic' A_Lens NoIx WikiMusicUser UUID #identifier)) Handler GetMeQueryResponse -> (GetMeQueryResponse -> Handler GetMeQueryResponse) -> Maybe GetMeQueryResponse -> Handler GetMeQueryResponse forall b a. b -> (a -> b) -> Maybe a -> b maybe (ServerError -> Handler GetMeQueryResponse forall a. ServerError -> Handler a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError ServerError err404) GetMeQueryResponse -> Handler GetMeQueryResponse forall a. a -> Handler a forall (f :: * -> *) a. Applicative f => a -> f a pure Maybe GetMeQueryResponse maybeUser )