mirror of
https://github.com/zadam/trilium.git
synced 2025-12-05 06:54:23 +01:00
edited notes: move edited-notes related code to own module
moved as-is
This commit is contained in:
parent
445dfaaeb4
commit
6134722b70
86
apps/server/src/routes/api/edited-notes.ts
Normal file
86
apps/server/src/routes/api/edited-notes.ts
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import beccaService from "../../becca/becca_service.js";
|
||||||
|
import sql from "../../services/sql.js";
|
||||||
|
import cls from "../../services/cls.js";
|
||||||
|
import becca from "../../becca/becca.js";
|
||||||
|
import type { Request } from "express";
|
||||||
|
import { NotePojo } from "../../becca/becca-interface.js";
|
||||||
|
import type BNote from "../../becca/entities/bnote.js";
|
||||||
|
import { EditedNotesResponse } from "@triliumnext/commons";
|
||||||
|
|
||||||
|
interface NotePath {
|
||||||
|
noteId: string;
|
||||||
|
branchId?: string;
|
||||||
|
title: string;
|
||||||
|
notePath: string[];
|
||||||
|
path: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NotePojoWithNotePath extends NotePojo {
|
||||||
|
notePath?: string[] | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getEditedNotesOnDate(req: Request) {
|
||||||
|
|
||||||
|
const noteIds = sql.getColumn<string>(/*sql*/`\
|
||||||
|
SELECT notes.*
|
||||||
|
FROM notes
|
||||||
|
WHERE noteId IN (
|
||||||
|
SELECT noteId FROM notes
|
||||||
|
WHERE
|
||||||
|
(notes.dateCreated LIKE :date OR notes.dateModified LIKE :date)
|
||||||
|
AND (notes.noteId NOT LIKE '\\_%' ESCAPE '\\')
|
||||||
|
UNION ALL
|
||||||
|
SELECT noteId FROM revisions
|
||||||
|
WHERE revisions.dateCreated LIKE :date
|
||||||
|
)
|
||||||
|
ORDER BY isDeleted
|
||||||
|
LIMIT 50`,
|
||||||
|
{ date: `${req.params.date}%` }
|
||||||
|
);
|
||||||
|
|
||||||
|
let notes = becca.getNotes(noteIds, true);
|
||||||
|
|
||||||
|
// Narrow down the results if a note is hoisted, similar to "Jump to note".
|
||||||
|
const hoistedNoteId = cls.getHoistedNoteId();
|
||||||
|
if (hoistedNoteId !== "root") {
|
||||||
|
notes = notes.filter((note) => note.hasAncestor(hoistedNoteId));
|
||||||
|
}
|
||||||
|
|
||||||
|
return notes.map((note) => {
|
||||||
|
const notePath = getNotePathData(note);
|
||||||
|
|
||||||
|
const notePojo: NotePojoWithNotePath = note.getPojo();
|
||||||
|
notePojo.notePath = notePath ? notePath.notePath : null;
|
||||||
|
|
||||||
|
return notePojo;
|
||||||
|
}) satisfies EditedNotesResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNotePathData(note: BNote): NotePath | undefined {
|
||||||
|
const retPath = note.getBestNotePath();
|
||||||
|
|
||||||
|
if (retPath) {
|
||||||
|
const noteTitle = beccaService.getNoteTitleForPath(retPath);
|
||||||
|
|
||||||
|
let branchId;
|
||||||
|
|
||||||
|
if (note.isRoot()) {
|
||||||
|
branchId = "none_root";
|
||||||
|
} else {
|
||||||
|
const parentNote = note.parents[0];
|
||||||
|
branchId = becca.getBranchFromChildAndParent(note.noteId, parentNote.noteId)?.branchId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
noteId: note.noteId,
|
||||||
|
branchId: branchId,
|
||||||
|
title: noteTitle,
|
||||||
|
notePath: retPath,
|
||||||
|
path: retPath.join("/")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
getEditedNotesOnDate,
|
||||||
|
};
|
||||||
@ -1,30 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
import beccaService from "../../becca/becca_service.js";
|
|
||||||
import utils from "../../services/utils.js";
|
import utils from "../../services/utils.js";
|
||||||
import sql from "../../services/sql.js";
|
import sql from "../../services/sql.js";
|
||||||
import cls from "../../services/cls.js";
|
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import becca from "../../becca/becca.js";
|
import becca from "../../becca/becca.js";
|
||||||
import blobService from "../../services/blob.js";
|
import blobService from "../../services/blob.js";
|
||||||
import eraseService from "../../services/erase.js";
|
import eraseService from "../../services/erase.js";
|
||||||
import type { Request, Response } from "express";
|
import type { Request, Response } from "express";
|
||||||
import type BRevision from "../../becca/entities/brevision.js";
|
import type BRevision from "../../becca/entities/brevision.js";
|
||||||
import type BNote from "../../becca/entities/bnote.js";
|
import { RevisionItem, RevisionPojo } from "@triliumnext/commons";
|
||||||
import type { NotePojo } from "../../becca/becca-interface.js";
|
|
||||||
import { EditedNotesResponse, RevisionItem, RevisionPojo, RevisionRow } from "@triliumnext/commons";
|
|
||||||
|
|
||||||
interface NotePath {
|
|
||||||
noteId: string;
|
|
||||||
branchId?: string;
|
|
||||||
title: string;
|
|
||||||
notePath: string[];
|
|
||||||
path: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface NotePojoWithNotePath extends NotePojo {
|
|
||||||
notePath?: string[] | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getRevisionBlob(req: Request) {
|
function getRevisionBlob(req: Request) {
|
||||||
const preview = req.query.preview === "true";
|
const preview = req.query.preview === "true";
|
||||||
@ -151,73 +135,11 @@ function restoreRevision(req: Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getEditedNotesOnDate(req: Request) {
|
|
||||||
const noteIds = sql.getColumn<string>(/*sql*/`\
|
|
||||||
SELECT notes.*
|
|
||||||
FROM notes
|
|
||||||
WHERE noteId IN (
|
|
||||||
SELECT noteId FROM notes
|
|
||||||
WHERE
|
|
||||||
(notes.dateCreated LIKE :date OR notes.dateModified LIKE :date)
|
|
||||||
AND (notes.noteId NOT LIKE '\\_%' ESCAPE '\\')
|
|
||||||
UNION ALL
|
|
||||||
SELECT noteId FROM revisions
|
|
||||||
WHERE revisions.dateCreated LIKE :date
|
|
||||||
)
|
|
||||||
ORDER BY isDeleted
|
|
||||||
LIMIT 50`,
|
|
||||||
{ date: `${req.params.date}%` }
|
|
||||||
);
|
|
||||||
|
|
||||||
let notes = becca.getNotes(noteIds, true);
|
|
||||||
|
|
||||||
// Narrow down the results if a note is hoisted, similar to "Jump to note".
|
|
||||||
const hoistedNoteId = cls.getHoistedNoteId();
|
|
||||||
if (hoistedNoteId !== "root") {
|
|
||||||
notes = notes.filter((note) => note.hasAncestor(hoistedNoteId));
|
|
||||||
}
|
|
||||||
|
|
||||||
return notes.map((note) => {
|
|
||||||
const notePath = getNotePathData(note);
|
|
||||||
|
|
||||||
const notePojo: NotePojoWithNotePath = note.getPojo();
|
|
||||||
notePojo.notePath = notePath ? notePath.notePath : null;
|
|
||||||
|
|
||||||
return notePojo;
|
|
||||||
}) satisfies EditedNotesResponse;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getNotePathData(note: BNote): NotePath | undefined {
|
|
||||||
const retPath = note.getBestNotePath();
|
|
||||||
|
|
||||||
if (retPath) {
|
|
||||||
const noteTitle = beccaService.getNoteTitleForPath(retPath);
|
|
||||||
|
|
||||||
let branchId;
|
|
||||||
|
|
||||||
if (note.isRoot()) {
|
|
||||||
branchId = "none_root";
|
|
||||||
} else {
|
|
||||||
const parentNote = note.parents[0];
|
|
||||||
branchId = becca.getBranchFromChildAndParent(note.noteId, parentNote.noteId)?.branchId;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
noteId: note.noteId,
|
|
||||||
branchId: branchId,
|
|
||||||
title: noteTitle,
|
|
||||||
notePath: retPath,
|
|
||||||
path: retPath.join("/")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getRevisionBlob,
|
getRevisionBlob,
|
||||||
getRevisions,
|
getRevisions,
|
||||||
getRevision,
|
getRevision,
|
||||||
downloadRevision,
|
downloadRevision,
|
||||||
getEditedNotesOnDate,
|
|
||||||
eraseAllRevisions,
|
eraseAllRevisions,
|
||||||
eraseAllExcessRevisions,
|
eraseAllExcessRevisions,
|
||||||
eraseRevision,
|
eraseRevision,
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import attachmentsApiRoute from "./api/attachments.js";
|
|||||||
import autocompleteApiRoute from "./api/autocomplete.js";
|
import autocompleteApiRoute from "./api/autocomplete.js";
|
||||||
import cloningApiRoute from "./api/cloning.js";
|
import cloningApiRoute from "./api/cloning.js";
|
||||||
import revisionsApiRoute from "./api/revisions.js";
|
import revisionsApiRoute from "./api/revisions.js";
|
||||||
|
import editedNotesApiRoute from "./api/edited-notes.js";
|
||||||
import recentChangesApiRoute from "./api/recent_changes.js";
|
import recentChangesApiRoute from "./api/recent_changes.js";
|
||||||
import optionsApiRoute from "./api/options.js";
|
import optionsApiRoute from "./api/options.js";
|
||||||
import passwordApiRoute from "./api/password.js";
|
import passwordApiRoute from "./api/password.js";
|
||||||
@ -349,7 +350,7 @@ function register(app: express.Application) {
|
|||||||
apiRoute(GET, "/api/other/icon-usage", otherRoute.getIconUsage);
|
apiRoute(GET, "/api/other/icon-usage", otherRoute.getIconUsage);
|
||||||
apiRoute(PST, "/api/other/render-markdown", otherRoute.renderMarkdown);
|
apiRoute(PST, "/api/other/render-markdown", otherRoute.renderMarkdown);
|
||||||
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(GET, "/api/edited-notes/:date", editedNotesApiRoute.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);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user