mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-12 03:32:30 +08:00
90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import type { Router } from "express";
|
|
|
|
import becca from "../becca/becca.js";
|
|
import eu from "./etapi_utils.js";
|
|
import mappers from "./mappers.js";
|
|
import BBranch from "../becca/entities/bbranch.js";
|
|
import entityChangesService from "../services/entity_changes.js";
|
|
import v from "./validators.js";
|
|
import type { BranchRow } from "@triliumnext/commons";
|
|
|
|
function register(router: Router) {
|
|
eu.route(router, "get", "/etapi/branches/:branchId", (req, res, next) => {
|
|
const branch = eu.getAndCheckBranch(req.params.branchId);
|
|
|
|
res.json(mappers.mapBranchToPojo(branch));
|
|
});
|
|
|
|
const ALLOWED_PROPERTIES_FOR_CREATE_BRANCH = {
|
|
noteId: [v.mandatory, v.notNull, v.isNoteId],
|
|
parentNoteId: [v.mandatory, v.notNull, v.isNoteId],
|
|
notePosition: [v.notNull, v.isInteger],
|
|
prefix: [v.isString],
|
|
isExpanded: [v.notNull, v.isBoolean]
|
|
};
|
|
|
|
eu.route(router, "post", "/etapi/branches", (req, res, next) => {
|
|
const _params = {};
|
|
eu.validateAndPatch(_params, req.body, ALLOWED_PROPERTIES_FOR_CREATE_BRANCH);
|
|
const params: BranchRow = _params as BranchRow;
|
|
|
|
const existing = becca.getBranchFromChildAndParent(params.noteId, params.parentNoteId);
|
|
|
|
if (existing) {
|
|
existing.notePosition = params.notePosition as number;
|
|
existing.prefix = params.prefix as string;
|
|
existing.isExpanded = params.isExpanded as boolean;
|
|
existing.save();
|
|
|
|
return res.status(200).json(mappers.mapBranchToPojo(existing));
|
|
} else {
|
|
try {
|
|
const branch = new BBranch(params).save();
|
|
|
|
res.status(201).json(mappers.mapBranchToPojo(branch));
|
|
} catch (e: any) {
|
|
throw new eu.EtapiError(400, eu.GENERIC_CODE, e.message);
|
|
}
|
|
}
|
|
});
|
|
|
|
const ALLOWED_PROPERTIES_FOR_PATCH = {
|
|
notePosition: [v.notNull, v.isInteger],
|
|
prefix: [v.isString],
|
|
isExpanded: [v.notNull, v.isBoolean]
|
|
};
|
|
|
|
eu.route(router, "patch", "/etapi/branches/:branchId", (req, res, next) => {
|
|
const branch = eu.getAndCheckBranch(req.params.branchId);
|
|
|
|
eu.validateAndPatch(branch, req.body, ALLOWED_PROPERTIES_FOR_PATCH);
|
|
branch.save();
|
|
|
|
res.json(mappers.mapBranchToPojo(branch));
|
|
});
|
|
|
|
eu.route(router, "delete", "/etapi/branches/:branchId", (req, res, next) => {
|
|
const branch = becca.getBranch(req.params.branchId);
|
|
|
|
if (!branch) {
|
|
return res.sendStatus(204);
|
|
}
|
|
|
|
branch.deleteBranch();
|
|
|
|
res.sendStatus(204);
|
|
});
|
|
|
|
eu.route(router, "post", "/etapi/refresh-note-ordering/:parentNoteId", (req, res, next) => {
|
|
eu.getAndCheckNote(req.params.parentNoteId);
|
|
|
|
entityChangesService.putNoteReorderingEntityChange(req.params.parentNoteId, "etapi");
|
|
|
|
res.sendStatus(204);
|
|
});
|
|
}
|
|
|
|
export default {
|
|
register
|
|
};
|