| License | AGPL-3 |
|---|---|
| Maintainer | stu235271@mail.uni-kiel.de stu236925@mail.uni-kiel.de |
| Safe Haskell | None |
| Language | Haskell2010 |
Docs
Description
This module provides a high level api wrapper around Docs.Database to interact with the document control and version management, e.g., to create, view, edit, manage, discuss and version documents.
All Docs api actions are abstracted over specific classes defined in
Docs.Database. A specific implementation for PostgreSQL databases are
HasqlSession and HasqlTransaction in Docs.Hasql.Database. These must be used
together, as some Database Operations require to be executed in a transactional
context. The PostgreSQL implementation can be used with the functions run and
runTransaction in Docs.Hasql.Database.
Synopsis
- data Error
- = NoPermission DocumentID Permission
- | NoPermissionForUser UserID
- | NoPermissionInGroup GroupID
- | SuperAdminOnly
- | DocumentNotFound DocumentID
- | RevisionNotFound RevisionRef
- | TextElementNotFound TextElementRef
- | TextRevisionNotFound TextRevisionRef
- | TreeRevisionNotFound TreeRevisionRef
- | CommentNotFound CommentRef
- | PDFError Text
- | ZipHTMLError
- | Custom Text
- type Result a = Either Error a
- type Limit = Int64
- logMessage :: (HasLogMessage m, ToJSON v) => Severity -> Maybe UserID -> Scope -> v -> m LogMessage
- newDefaultDocument :: (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)))
- createDocument :: (HasCreateDocument m, HasLogMessage m) => UserID -> GroupID -> Text -> m (Result Document)
- getDocument :: (HasGetDocument m, HasLogMessage m) => UserID -> DocumentID -> m (Result Document)
- getDocuments :: (HasGetDocument m, HasLogMessage m) => UserID -> Maybe UserID -> Maybe GroupID -> m (Result (Vector Document))
- createTextElement :: (HasCreateTextElement m, HasLogMessage m) => UserID -> DocumentID -> TextElementKind -> TextElementType -> m (Result TextElement)
- createTextRevision :: (HasCreateTextRevision m, HasGetTextElementRevision m, HasExistsComment m, HasLogMessage m, HasGetTreeRevision m, HasGetRevisionKey m, HasGetDocument m, HasDraftTextRevision m) => UserID -> NewTextRevision -> m (Result (Rendered ConflictStatus))
- getTextElementRevision :: (HasGetTextElementRevision m, HasGetTreeRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m) => UserID -> TextRevisionRef -> m (Result (Maybe (Rendered TextElementRevision)))
- getTextRevisionPDF :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, MonadIO m) => UserID -> TextRevisionRef -> m (Result PDFBytes)
- getDocumentRevisionText :: (HasGetTextElementRevision m, HasGetRevisionKey m, HasLogMessage m) => UserID -> RevisionRef -> TextElementID -> m (Result (Maybe TextElementRevision))
- getTreeRevision :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m) => UserID -> TreeRevisionRef -> m (Result (Maybe (TreeRevisionWithMetaData TextElement)))
- getDocumentRevisionTree :: (HasGetTreeRevision m, HasGetRevisionKey m, HasLogMessage m) => UserID -> RevisionRef -> m (Result (Maybe (TreeRevision TextElement)))
- createTreeRevision :: (HasCreateTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, HasGetTreeRevision m, HasRollback m) => UserID -> DocumentID -> Node TextElementID -> m (Result (TreeRevisionWithMetaData TextElementID))
- getFullTreeRevision :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m) => UserID -> TreeRevisionRef -> m (Result (Maybe (TreeRevisionWithMetaData TextElementRevision)))
- getTextHistory :: (HasGetTextHistory m, HasLogMessage m) => UserID -> TextElementRef -> Maybe UTCTime -> Maybe UTCTime -> Maybe Limit -> m (Result TextRevisionHistory)
- getTreeHistory :: (HasGetTreeHistory m, HasLogMessage m) => UserID -> DocumentID -> Maybe UTCTime -> Maybe Limit -> m (Result TreeRevisionHistory)
- getDocumentHistory :: (HasGetDocumentHistory m, HasLogMessage m) => UserID -> DocumentID -> Maybe UTCTime -> Maybe Limit -> m (Result DocumentHistory)
- getDocumentRevision :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m) => UserID -> RevisionRef -> m (Result (FullDocument TextElementRevision))
- getTreeRevisionPDF :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, MonadIO m) => UserID -> TreeRevisionRef -> m (Result PDFBytes)
- getTreeRevisionHTML :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, MonadIO m) => UserID -> TreeRevisionRef -> m (Result ZipBytes)
- getDocumentRevisionPDF :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m, MonadIO m) => UserID -> RevisionRef -> m (Result PDFBytes)
- getDocumentRevisionHTML :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m, MonadIO m) => UserID -> RevisionRef -> m (Result ZipBytes)
- createComment :: (HasCreateComment m, HasLogMessage m) => UserID -> TextElementRef -> Text -> m (Result Comment)
- getComments :: (HasGetComments m, HasLogMessage m) => UserID -> TextElementRef -> m (Result (Vector Comment))
- resolveComment :: (HasCreateComment m, HasLogMessage m) => UserID -> CommentRef -> m (Result ())
- createReply :: (HasCreateComment m, HasLogMessage m) => UserID -> CommentRef -> Text -> m (Result Message)
- getLogs :: (HasGetLogs m, HasLogMessage m) => UserID -> Maybe UTCTime -> Int64 -> m (Result (Vector LogMessage))
- getDraftTextRevision :: (HasDraftTextRevision m, HasLogMessage m, HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m) => UserID -> TextElementRef -> m (Result (Maybe (Rendered DraftRevision)))
- publishDraftTextRevision :: (HasDraftTextRevision m, HasCreateTextRevision m, HasGetTextElementRevision m, HasExistsComment m, HasGetRevisionKey m, HasGetDocument m, HasGetTreeRevision m, HasLogMessage m) => UserID -> TextElementRef -> m (Result (Rendered ConflictStatus))
- discardDraftTextRevision :: (HasDraftTextRevision m, HasLogMessage m) => UserID -> TextElementRef -> m (Result ())
Documentation
Represents an error of the docs api
Constructors
Instances
logMessage :: (HasLogMessage m, ToJSON v) => Severity -> Maybe UserID -> Scope -> v -> m LogMessage Source #
Logs a message
newDefaultDocument :: (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))) Source #
createDocument :: (HasCreateDocument m, HasLogMessage m) => UserID -> GroupID -> Text -> m (Result Document) Source #
Create a new document
getDocument :: (HasGetDocument m, HasLogMessage m) => UserID -> DocumentID -> m (Result Document) Source #
Get a document
getDocuments :: (HasGetDocument m, HasLogMessage m) => UserID -> Maybe UserID -> Maybe GroupID -> m (Result (Vector Document)) Source #
Gets all documents visible by the user OR all documents by the specified group and / or user
createTextElement :: (HasCreateTextElement m, HasLogMessage m) => UserID -> DocumentID -> TextElementKind -> TextElementType -> m (Result TextElement) Source #
Create a new TextElement
createTextRevision :: (HasCreateTextRevision m, HasGetTextElementRevision m, HasExistsComment m, HasLogMessage m, HasGetTreeRevision m, HasGetRevisionKey m, HasGetDocument m, HasDraftTextRevision m) => UserID -> NewTextRevision -> m (Result (Rendered ConflictStatus)) Source #
Create a new TextRevision in the Database.
Updates the latest revision instead of creating a new one, if - the latest revision is created by the same author, - the latest revision is no older than a set threshold. In case of an update, the revision id is increased nevertheless to prevent lost update scenarios.
getTextElementRevision :: (HasGetTextElementRevision m, HasGetTreeRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m) => UserID -> TextRevisionRef -> m (Result (Maybe (Rendered TextElementRevision))) Source #
Get a specific revision for a TextElement
getTextRevisionPDF :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, MonadIO m) => UserID -> TextRevisionRef -> m (Result PDFBytes) Source #
getDocumentRevisionText :: (HasGetTextElementRevision m, HasGetRevisionKey m, HasLogMessage m) => UserID -> RevisionRef -> TextElementID -> m (Result (Maybe TextElementRevision)) Source #
getTreeRevision :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m) => UserID -> TreeRevisionRef -> m (Result (Maybe (TreeRevisionWithMetaData TextElement))) Source #
getDocumentRevisionTree :: (HasGetTreeRevision m, HasGetRevisionKey m, HasLogMessage m) => UserID -> RevisionRef -> m (Result (Maybe (TreeRevision TextElement))) Source #
createTreeRevision :: (HasCreateTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, HasGetTreeRevision m, HasRollback m) => UserID -> DocumentID -> Node TextElementID -> m (Result (TreeRevisionWithMetaData TextElementID)) Source #
getFullTreeRevision :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m) => UserID -> TreeRevisionRef -> m (Result (Maybe (TreeRevisionWithMetaData TextElementRevision))) Source #
getTextHistory :: (HasGetTextHistory m, HasLogMessage m) => UserID -> TextElementRef -> Maybe UTCTime -> Maybe UTCTime -> Maybe Limit -> m (Result TextRevisionHistory) Source #
getTreeHistory :: (HasGetTreeHistory m, HasLogMessage m) => UserID -> DocumentID -> Maybe UTCTime -> Maybe Limit -> m (Result TreeRevisionHistory) Source #
getDocumentHistory :: (HasGetDocumentHistory m, HasLogMessage m) => UserID -> DocumentID -> Maybe UTCTime -> Maybe Limit -> m (Result DocumentHistory) Source #
getDocumentRevision :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m) => UserID -> RevisionRef -> m (Result (FullDocument TextElementRevision)) Source #
getTreeRevisionPDF :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, MonadIO m) => UserID -> TreeRevisionRef -> m (Result PDFBytes) Source #
getTreeRevisionHTML :: (HasGetTreeRevision m, HasLogMessage m, HasGetTextElementRevision m, MonadIO m) => UserID -> TreeRevisionRef -> m (Result ZipBytes) Source #
getDocumentRevisionPDF :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m, MonadIO m) => UserID -> RevisionRef -> m (Result PDFBytes) Source #
getDocumentRevisionHTML :: (HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m, HasLogMessage m, MonadIO m) => UserID -> RevisionRef -> m (Result ZipBytes) Source #
createComment :: (HasCreateComment m, HasLogMessage m) => UserID -> TextElementRef -> Text -> m (Result Comment) Source #
getComments :: (HasGetComments m, HasLogMessage m) => UserID -> TextElementRef -> m (Result (Vector Comment)) Source #
resolveComment :: (HasCreateComment m, HasLogMessage m) => UserID -> CommentRef -> m (Result ()) Source #
createReply :: (HasCreateComment m, HasLogMessage m) => UserID -> CommentRef -> Text -> m (Result Message) Source #
getLogs :: (HasGetLogs m, HasLogMessage m) => UserID -> Maybe UTCTime -> Int64 -> m (Result (Vector LogMessage)) Source #
Obtain log messages
getDraftTextRevision :: (HasDraftTextRevision m, HasLogMessage m, HasGetTreeRevision m, HasGetTextElementRevision m, HasGetRevisionKey m, HasGetDocument m) => UserID -> TextElementRef -> m (Result (Maybe (Rendered DraftRevision))) Source #
Get draft text revision for a user and text element. Returns Nothing if no draft exists for this user/element combination. Drafts are user-specific and element-specific (one draft per user per text element).
publishDraftTextRevision :: (HasDraftTextRevision m, HasCreateTextRevision m, HasGetTextElementRevision m, HasExistsComment m, HasGetRevisionKey m, HasGetDocument m, HasGetTreeRevision m, HasLogMessage m) => UserID -> TextElementRef -> m (Result (Rendered ConflictStatus)) Source #
Publish a draft text revision to the main revision tree. This attempts to create a regular text revision from the draft content. If conflicts occur, they are handled as errors (since publishing is explicit, not auto-save). On successful publish, the draft is automatically discarded.
discardDraftTextRevision :: (HasDraftTextRevision m, HasLogMessage m) => UserID -> TextElementRef -> m (Result ()) Source #
Discard a draft text revision, permanently deleting all unsaved changes. This operation cannot be undone. The draft is completely removed from storage.