{-# LANGUAGE OverloadedStrings #-}
module Lib
( someFunc
)
where
import Data.Maybe (fromMaybe)
import Data.UUID (fromString)
import Database (getConnection, migrate)
import Docs (logMessage)
import qualified Docs
import Docs.ExampleDoc (exampleTree)
import Docs.Hasql.Database (run, runTransaction)
import Logging.Logs (Severity (Error, Info))
import qualified Logging.Scope as Scope
import Mail (testMail)
import Server
someFunc :: IO ()
someFunc :: IO ()
someFunc = do
Right Connection
connection <- IO (Either ConnectionError Connection)
getConnection
Right [Maybe MigrationError]
_ <- Connection -> IO (Either SessionError [Maybe MigrationError])
migrate Connection
connection
Right LogMessage
_ <-
(HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage))
-> Connection
-> HasqlSession LogMessage
-> IO (Either SessionError LogMessage)
forall a b c. (a -> b -> c) -> b -> a -> c
flip HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage)
forall a.
HasqlSession a -> Connection -> IO (Either SessionError a)
run Connection
connection (HasqlSession LogMessage -> IO (Either SessionError LogMessage))
-> HasqlSession LogMessage -> IO (Either SessionError LogMessage)
forall a b. (a -> b) -> a -> b
$
Severity
-> Maybe UserID -> Scope -> String -> HasqlSession LogMessage
forall (m :: * -> *) v.
(HasLogMessage m, ToJSON v) =>
Severity -> Maybe UserID -> Scope -> v -> m LogMessage
logMessage Severity
Info Maybe UserID
forall a. Maybe a
Nothing Scope
Scope.server (String
"Starting Server..." :: String)
IO ()
testMail
let userID :: UserID
userID = UserID -> Maybe UserID -> UserID
forall a. a -> Maybe a -> a
fromMaybe UserID
forall a. HasCallStack => a
undefined (Maybe UserID -> UserID) -> Maybe UserID -> UserID
forall a b. (a -> b) -> a -> b
$ String -> Maybe UserID
fromString String
"7f59659a-9a46-4ba0-a911-09698107a6ea"
let groupID :: GroupID
groupID = GroupID
1
let title :: Text
title = Text
"Test Document"
Either
SessionError (Result (FullDocument (Rendered TextElementRevision)))
result <-
(HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
-> Connection
-> IO
(Either
SessionError
(Result (FullDocument (Rendered TextElementRevision)))))
-> Connection
-> HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
-> IO
(Either
SessionError
(Result (FullDocument (Rendered TextElementRevision))))
forall a b c. (a -> b -> c) -> b -> a -> c
flip
HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
-> Connection
-> IO
(Either
SessionError
(Result (FullDocument (Rendered TextElementRevision))))
forall a.
HasqlTransaction a -> Connection -> IO (Either SessionError a)
runTransaction
Connection
connection
(HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
-> IO
(Either
SessionError
(Result (FullDocument (Rendered TextElementRevision)))))
-> HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
-> IO
(Either
SessionError
(Result (FullDocument (Rendered TextElementRevision))))
forall a b. (a -> b) -> a -> b
$ UserID
-> GroupID
-> Text
-> FlaggedInputTree'
-> HasqlTransaction
(Result (FullDocument (Rendered TextElementRevision)))
forall (m :: * -> *).
(HasCreateDocument m, HasLogMessage m, HasCreateTextElement m,
HasCreateTextRevision m, HasGetTextElementRevision m,
HasExistsComment m, HasCreateTreeRevision m, HasGetTreeRevision m,
HasGetRevisionKey m, HasGetDocument m, HasRollback m,
HasDraftTextRevision m) =>
UserID
-> GroupID
-> Text
-> FlaggedInputTree'
-> m (Result (FullDocument (Rendered TextElementRevision)))
Docs.newDefaultDocument
UserID
userID
GroupID
groupID
Text
title
FlaggedInputTree'
exampleTree
Either SessionError LogMessage
_ <- case Either
SessionError (Result (FullDocument (Rendered TextElementRevision)))
result of
Left SessionError
err ->
(HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage))
-> Connection
-> HasqlSession LogMessage
-> IO (Either SessionError LogMessage)
forall a b c. (a -> b -> c) -> b -> a -> c
flip HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage)
forall a.
HasqlSession a -> Connection -> IO (Either SessionError a)
run Connection
connection (HasqlSession LogMessage -> IO (Either SessionError LogMessage))
-> HasqlSession LogMessage -> IO (Either SessionError LogMessage)
forall a b. (a -> b) -> a -> b
$
Severity
-> Maybe UserID -> Scope -> String -> HasqlSession LogMessage
forall (m :: * -> *) v.
(HasLogMessage m, ToJSON v) =>
Severity -> Maybe UserID -> Scope -> v -> m LogMessage
logMessage Severity
Error Maybe UserID
forall a. Maybe a
Nothing Scope
Scope.server (String -> HasqlSession LogMessage)
-> String -> HasqlSession LogMessage
forall a b. (a -> b) -> a -> b
$
SessionError -> String
forall a. Show a => a -> String
show SessionError
err
Right (Left Error
err) ->
(HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage))
-> Connection
-> HasqlSession LogMessage
-> IO (Either SessionError LogMessage)
forall a b c. (a -> b -> c) -> b -> a -> c
flip HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage)
forall a.
HasqlSession a -> Connection -> IO (Either SessionError a)
run Connection
connection (HasqlSession LogMessage -> IO (Either SessionError LogMessage))
-> HasqlSession LogMessage -> IO (Either SessionError LogMessage)
forall a b. (a -> b) -> a -> b
$ Severity
-> Maybe UserID -> Scope -> Error -> HasqlSession LogMessage
forall (m :: * -> *) v.
(HasLogMessage m, ToJSON v) =>
Severity -> Maybe UserID -> Scope -> v -> m LogMessage
logMessage Severity
Error Maybe UserID
forall a. Maybe a
Nothing Scope
Scope.server Error
err
Either
SessionError (Result (FullDocument (Rendered TextElementRevision)))
_ ->
(HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage))
-> Connection
-> HasqlSession LogMessage
-> IO (Either SessionError LogMessage)
forall a b c. (a -> b -> c) -> b -> a -> c
flip HasqlSession LogMessage
-> Connection -> IO (Either SessionError LogMessage)
forall a.
HasqlSession a -> Connection -> IO (Either SessionError a)
run Connection
connection (HasqlSession LogMessage -> IO (Either SessionError LogMessage))
-> HasqlSession LogMessage -> IO (Either SessionError LogMessage)
forall a b. (a -> b) -> a -> b
$
Severity
-> Maybe UserID -> Scope -> String -> HasqlSession LogMessage
forall (m :: * -> *) v.
(HasLogMessage m, ToJSON v) =>
Severity -> Maybe UserID -> Scope -> v -> m LogMessage
logMessage
Severity
Info
Maybe UserID
forall a. Maybe a
Nothing
Scope
Scope.server
(String
"Document insertion successful" :: String)
IO ()
runServer
() -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()