mirror of
https://github.com/zadam/trilium.git
synced 2026-03-04 19:25:10 +01:00
chore(core): port revisions route
This commit is contained in:
parent
969860c344
commit
08f1d44d90
@ -41,7 +41,6 @@ import passwordApiRoute from "./api/password.js";
|
|||||||
import recentChangesApiRoute from "./api/recent_changes.js";
|
import recentChangesApiRoute from "./api/recent_changes.js";
|
||||||
import recoveryCodes from './api/recovery_codes.js';
|
import recoveryCodes from './api/recovery_codes.js';
|
||||||
import relationMapApiRoute from "./api/relation-map.js";
|
import relationMapApiRoute from "./api/relation-map.js";
|
||||||
import revisionsApiRoute from "./api/revisions.js";
|
|
||||||
import scriptRoute from "./api/script.js";
|
import scriptRoute from "./api/script.js";
|
||||||
import searchRoute from "./api/search.js";
|
import searchRoute from "./api/search.js";
|
||||||
import senderRoute from "./api/sender.js";
|
import senderRoute from "./api/sender.js";
|
||||||
@ -136,16 +135,10 @@ function register(app: express.Application) {
|
|||||||
apiRoute(PST, "/api/attachments/:attachmentId/upload-modified-file", filesRoute.uploadModifiedFileToAttachment);
|
apiRoute(PST, "/api/attachments/:attachmentId/upload-modified-file", filesRoute.uploadModifiedFileToAttachment);
|
||||||
route(PUT, "/api/attachments/:attachmentId/file", [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], filesRoute.updateAttachment, apiResultHandler);
|
route(PUT, "/api/attachments/:attachmentId/file", [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], filesRoute.updateAttachment, apiResultHandler);
|
||||||
|
|
||||||
apiRoute(GET, "/api/notes/:noteId/revisions", revisionsApiRoute.getRevisions);
|
|
||||||
apiRoute(DEL, "/api/notes/:noteId/revisions", revisionsApiRoute.eraseAllRevisions);
|
|
||||||
apiRoute(PST, "/api/revisions/erase-all-excess-revisions", revisionsApiRoute.eraseAllExcessRevisions);
|
|
||||||
apiRoute(GET, "/api/revisions/:revisionId", revisionsApiRoute.getRevision);
|
|
||||||
apiRoute(GET, "/api/revisions/:revisionId/blob", revisionsApiRoute.getRevisionBlob);
|
|
||||||
apiRoute(DEL, "/api/revisions/:revisionId", revisionsApiRoute.eraseRevision);
|
|
||||||
apiRoute(PST, "/api/revisions/:revisionId/restore", revisionsApiRoute.restoreRevision);
|
|
||||||
route(GET, "/api/revisions/:revisionId/image/:filename", [auth.checkApiAuthOrElectron], imageRoute.returnImageFromRevision);
|
route(GET, "/api/revisions/:revisionId/image/:filename", [auth.checkApiAuthOrElectron], imageRoute.returnImageFromRevision);
|
||||||
|
|
||||||
route(GET, "/api/revisions/:revisionId/download", [auth.checkApiAuthOrElectron], revisionsApiRoute.downloadRevision);
|
// TODO: Re-enable once we suppourt route()
|
||||||
|
// route(GET, "/api/revisions/:revisionId/download", [auth.checkApiAuthOrElectron], revisionsApiRoute.downloadRevision);
|
||||||
|
|
||||||
route(GET, "/api/branches/:branchId/export/:type/:format/:version/:taskId", [auth.checkApiAuthOrElectron], exportRoute.exportBranch);
|
route(GET, "/api/branches/:branchId/export/:type/:format/:version/:taskId", [auth.checkApiAuthOrElectron], exportRoute.exportBranch);
|
||||||
asyncRoute(PST, "/api/notes/:parentNoteId/notes-import", [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], importRoute.importNotesToBranch, apiResultHandler);
|
asyncRoute(PST, "/api/notes/:parentNoteId/notes-import", [auth.checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], importRoute.importNotesToBranch, apiResultHandler);
|
||||||
@ -271,7 +264,6 @@ function register(app: express.Application) {
|
|||||||
apiRoute(PST, "/api/other/render-markdown", otherRoute.renderMarkdown);
|
apiRoute(PST, "/api/other/render-markdown", otherRoute.renderMarkdown);
|
||||||
apiRoute(PST, "/api/other/to-markdown", otherRoute.toMarkdown);
|
apiRoute(PST, "/api/other/to-markdown", otherRoute.toMarkdown);
|
||||||
apiRoute(GET, "/api/recent-changes/:ancestorNoteId", recentChangesApiRoute.getRecentChanges);
|
apiRoute(GET, "/api/recent-changes/:ancestorNoteId", recentChangesApiRoute.getRecentChanges);
|
||||||
apiRoute(GET, "/api/edited-notes/:date", revisionsApiRoute.getEditedNotesOnDate);
|
|
||||||
|
|
||||||
apiRoute(PST, "/api/note-map/:noteId/tree", noteMapRoute.getTreeMap);
|
apiRoute(PST, "/api/note-map/:noteId/tree", noteMapRoute.getTreeMap);
|
||||||
apiRoute(PST, "/api/note-map/:noteId/link", noteMapRoute.getLinkMap);
|
apiRoute(PST, "/api/note-map/:noteId/link", noteMapRoute.getLinkMap);
|
||||||
|
|||||||
@ -1,14 +1,15 @@
|
|||||||
import { EditedNotesResponse, RevisionItem, RevisionPojo } from "@triliumnext/commons";
|
import { EditedNotesResponse, RevisionItem, RevisionPojo } from "@triliumnext/commons";
|
||||||
import { becca_service, binary_utils, blob as blobService, erase as eraseService, NotePojo } from "@triliumnext/core";
|
|
||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
import becca from "../../becca/becca.js";
|
import becca from "../../becca/becca.js";
|
||||||
import type BNote from "../../becca/entities/bnote.js";
|
import type BNote from "../../becca/entities/bnote.js";
|
||||||
import type BRevision from "../../becca/entities/brevision.js";
|
import type BRevision from "../../becca/entities/brevision.js";
|
||||||
import cls from "../../services/cls.js";
|
import blobService from "../../services/blob.js";
|
||||||
import sql from "../../services/sql.js";
|
import eraseService from "../../services/erase.js";
|
||||||
import utils from "../../services/utils.js";
|
import { NotePojo } from "../../becca/becca-interface.js";
|
||||||
|
import { becca_service, binary_utils, cls, getSql } from "../../index.js";
|
||||||
|
import { formatDownloadTitle, getContentDisposition } from "../../services/utils/index.js";
|
||||||
|
|
||||||
interface NotePath {
|
interface NotePath {
|
||||||
noteId: string;
|
noteId: string;
|
||||||
@ -60,7 +61,7 @@ function getRevision(req: Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getRevisionFilename(revision: BRevision) {
|
function getRevisionFilename(revision: BRevision) {
|
||||||
let filename = utils.formatDownloadTitle(revision.title, revision.type, revision.mime);
|
let filename = formatDownloadTitle(revision.title, revision.type, revision.mime);
|
||||||
|
|
||||||
if (!revision.dateCreated) {
|
if (!revision.dateCreated) {
|
||||||
throw new Error("Missing creation date for revision.");
|
throw new Error("Missing creation date for revision.");
|
||||||
@ -90,14 +91,14 @@ function downloadRevision(req: Request, res: Response) {
|
|||||||
|
|
||||||
const filename = getRevisionFilename(revision);
|
const filename = getRevisionFilename(revision);
|
||||||
|
|
||||||
res.setHeader("Content-Disposition", utils.getContentDisposition(filename));
|
res.setHeader("Content-Disposition", getContentDisposition(filename));
|
||||||
res.setHeader("Content-Type", revision.mime);
|
res.setHeader("Content-Type", revision.mime);
|
||||||
|
|
||||||
res.send(revision.getContent());
|
res.send(revision.getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
function eraseAllRevisions(req: Request) {
|
function eraseAllRevisions(req: Request) {
|
||||||
const revisionIdsToErase = sql.getColumn<string>("SELECT revisionId FROM revisions WHERE noteId = ?", [req.params.noteId]);
|
const revisionIdsToErase = getSql().getColumn<string>("SELECT revisionId FROM revisions WHERE noteId = ?", [req.params.noteId]);
|
||||||
|
|
||||||
eraseService.eraseRevisions(revisionIdsToErase);
|
eraseService.eraseRevisions(revisionIdsToErase);
|
||||||
}
|
}
|
||||||
@ -107,7 +108,7 @@ function eraseRevision(req: Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function eraseAllExcessRevisions() {
|
function eraseAllExcessRevisions() {
|
||||||
const allNoteIds = sql.getRows("SELECT noteId FROM notes WHERE SUBSTRING(noteId, 1, 1) != '_'") as { noteId: string }[];
|
const allNoteIds = getSql().getRows("SELECT noteId FROM notes WHERE SUBSTRING(noteId, 1, 1) != '_'") as { noteId: string }[];
|
||||||
allNoteIds.forEach((row) => {
|
allNoteIds.forEach((row) => {
|
||||||
becca.getNote(row.noteId)?.eraseExcessRevisionSnapshots();
|
becca.getNote(row.noteId)?.eraseExcessRevisionSnapshots();
|
||||||
});
|
});
|
||||||
@ -119,7 +120,7 @@ function restoreRevision(req: Request) {
|
|||||||
if (revision) {
|
if (revision) {
|
||||||
const note = revision.getNote();
|
const note = revision.getNote();
|
||||||
|
|
||||||
sql.transactional(() => {
|
getSql().transactional(() => {
|
||||||
note.saveRevision();
|
note.saveRevision();
|
||||||
|
|
||||||
for (const oldNoteAttachment of note.getAttachments()) {
|
for (const oldNoteAttachment of note.getAttachments()) {
|
||||||
@ -148,7 +149,7 @@ function restoreRevision(req: Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getEditedNotesOnDate(req: Request) {
|
function getEditedNotesOnDate(req: Request) {
|
||||||
const noteIds = sql.getColumn<string>(/*sql*/`\
|
const noteIds = getSql().getColumn<string>(/*sql*/`\
|
||||||
SELECT notes.*
|
SELECT notes.*
|
||||||
FROM notes
|
FROM notes
|
||||||
WHERE noteId IN (
|
WHERE noteId IN (
|
||||||
@ -13,6 +13,7 @@ import AbstractBeccaEntity from "../becca/entities/abstract_becca_entity";
|
|||||||
import cloningApiRoute from "./api/cloning";
|
import cloningApiRoute from "./api/cloning";
|
||||||
import sqlRoute from "./api/sql";
|
import sqlRoute from "./api/sql";
|
||||||
import attributesRoute from "./api/attributes";
|
import attributesRoute from "./api/attributes";
|
||||||
|
import revisionsApiRoute from "./api/revisions";
|
||||||
|
|
||||||
// TODO: Deduplicate with routes.ts
|
// TODO: Deduplicate with routes.ts
|
||||||
const GET = "get",
|
const GET = "get",
|
||||||
@ -70,6 +71,15 @@ export function buildSharedApiRoutes(apiRoute: any) {
|
|||||||
apiRoute(GET, "/api/attribute-names/", attributesRoute.getAttributeNames);
|
apiRoute(GET, "/api/attribute-names/", attributesRoute.getAttributeNames);
|
||||||
apiRoute(GET, "/api/attribute-values/:attributeName", attributesRoute.getValuesForAttribute);
|
apiRoute(GET, "/api/attribute-values/:attributeName", attributesRoute.getValuesForAttribute);
|
||||||
|
|
||||||
|
apiRoute(GET, "/api/notes/:noteId/revisions", revisionsApiRoute.getRevisions);
|
||||||
|
apiRoute(DEL, "/api/notes/:noteId/revisions", revisionsApiRoute.eraseAllRevisions);
|
||||||
|
apiRoute(PST, "/api/revisions/erase-all-excess-revisions", revisionsApiRoute.eraseAllExcessRevisions);
|
||||||
|
apiRoute(GET, "/api/revisions/:revisionId", revisionsApiRoute.getRevision);
|
||||||
|
apiRoute(GET, "/api/revisions/:revisionId/blob", revisionsApiRoute.getRevisionBlob);
|
||||||
|
apiRoute(DEL, "/api/revisions/:revisionId", revisionsApiRoute.eraseRevision);
|
||||||
|
apiRoute(PST, "/api/revisions/:revisionId/restore", revisionsApiRoute.restoreRevision);
|
||||||
|
apiRoute(GET, "/api/edited-notes/:date", revisionsApiRoute.getEditedNotesOnDate);
|
||||||
|
|
||||||
apiRoute(PUT, "/api/branches/:branchId/move-to/:parentBranchId", branchesApiRoute.moveBranchToParent);
|
apiRoute(PUT, "/api/branches/:branchId/move-to/:parentBranchId", branchesApiRoute.moveBranchToParent);
|
||||||
apiRoute(PUT, "/api/branches/:branchId/move-before/:beforeBranchId", branchesApiRoute.moveBranchBeforeNote);
|
apiRoute(PUT, "/api/branches/:branchId/move-before/:beforeBranchId", branchesApiRoute.moveBranchBeforeNote);
|
||||||
apiRoute(PUT, "/api/branches/:branchId/move-after/:afterBranchId", branchesApiRoute.moveBranchAfterNote);
|
apiRoute(PUT, "/api/branches/:branchId/move-after/:afterBranchId", branchesApiRoute.moveBranchAfterNote);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user