server-ts: Port services/attributes

This commit is contained in:
Elian Doran 2024-02-18 11:26:05 +02:00
parent 2fbd2e3c29
commit d8d729342d
No known key found for this signature in database
15 changed files with 35 additions and 35 deletions

View File

@ -66,7 +66,7 @@ export type AttributeType = "label" | "relation";
export interface AttributeRow { export interface AttributeRow {
attributeId?: string; attributeId?: string;
noteId: string; noteId?: string;
type: AttributeType; type: AttributeType;
name: string; name: string;
position?: number; position?: number;

View File

@ -1,7 +1,7 @@
const becca = require('../becca/becca'); const becca = require('../becca/becca');
const eu = require('./etapi_utils'); const eu = require('./etapi_utils');
const mappers = require('./mappers.js'); const mappers = require('./mappers.js');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes');
const v = require('./validators.js'); const v = require('./validators.js');
function register(router) { function register(router) {

View File

@ -2,7 +2,7 @@
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const log = require('../../services/log'); const log = require('../../services/log');
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes');
const BAttribute = require('../../becca/entities/battribute'); const BAttribute = require('../../becca/entities/battribute');
const becca = require('../../becca/becca'); const becca = require('../../becca/becca');
const ValidationError = require('../../errors/validation_error'); const ValidationError = require('../../errors/validation_error');

View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes');
const cloneService = require('../../services/cloning.js'); const cloneService = require('../../services/cloning.js');
const noteService = require('../../services/notes'); const noteService = require('../../services/notes');
const dateNoteService = require('../../services/date_notes.js'); const dateNoteService = require('../../services/date_notes.js');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const scriptService = require('../../services/script.js'); const scriptService = require('../../services/script.js');
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes');
const becca = require('../../becca/becca'); const becca = require('../../becca/becca');
const syncService = require('../../services/sync.js'); const syncService = require('../../services/sync.js');
const sql = require('../../services/sql'); const sql = require('../../services/sql');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const sql = require('../services/sql'); const sql = require('../services/sql');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes');
const config = require('../services/config'); const config = require('../services/config');
const optionService = require('../services/options'); const optionService = require('../services/options');
const log = require('../services/log'); const log = require('../services/log');

View File

@ -42,7 +42,7 @@ const setupApiRoute = require('./api/setup.js');
const sqlRoute = require('./api/sql'); const sqlRoute = require('./api/sql');
const databaseRoute = require('./api/database.js'); const databaseRoute = require('./api/database.js');
const imageRoute = require('./api/image.js'); const imageRoute = require('./api/image.js');
const attributesRoute = require('./api/attributes.js'); const attributesRoute = require('./api/attributes');
const scriptRoute = require('./api/script.js'); const scriptRoute = require('./api/script.js');
const senderRoute = require('./api/sender.js'); const senderRoute = require('./api/sender.js');
const filesRoute = require('./api/files.js'); const filesRoute = require('./api/files.js');
@ -64,7 +64,7 @@ const shareRoutes = require('../share/routes.js');
const etapiAuthRoutes = require('../etapi/auth.js'); const etapiAuthRoutes = require('../etapi/auth.js');
const etapiAppInfoRoutes = require('../etapi/app_info'); const etapiAppInfoRoutes = require('../etapi/app_info');
const etapiAttachmentRoutes = require('../etapi/attachments.js'); const etapiAttachmentRoutes = require('../etapi/attachments.js');
const etapiAttributeRoutes = require('../etapi/attributes.js'); const etapiAttributeRoutes = require('../etapi/attributes');
const etapiBranchRoutes = require('../etapi/branches.js'); const etapiBranchRoutes = require('../etapi/branches.js');
const etapiNoteRoutes = require('../etapi/notes.js'); const etapiNoteRoutes = require('../etapi/notes.js');
const etapiSpecialNoteRoutes = require('../etapi/special_notes.js'); const etapiSpecialNoteRoutes = require('../etapi/special_notes.js');

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
import BAttribute = require("../becca/entities/battribute"); import { AttributeRow } from "../becca/entities/rows";
function formatAttrForSearch(attr: BAttribute, searchWithValue: string) { function formatAttrForSearch(attr: AttributeRow, searchWithValue: boolean) {
let searchStr = ''; let searchStr = '';
if (attr.type === 'label') { if (attr.type === 'label') {

View File

@ -1,17 +1,18 @@
"use strict"; "use strict";
const searchService = require('./search/services/search'); import searchService = require('./search/services/search');
const sql = require('./sql'); import sql = require('./sql');
const becca = require('../becca/becca'); import becca = require('../becca/becca');
const BAttribute = require('../becca/entities/battribute'); import BAttribute = require('../becca/entities/battribute');
const {formatAttrForSearch} = require('./attribute_formatter'); import attributeFormatter = require('./attribute_formatter');
const BUILTIN_ATTRIBUTES = require('./builtin_attributes'); import BUILTIN_ATTRIBUTES = require('./builtin_attributes');
import BNote = require('../becca/entities/bnote');
import { AttributeRow } from '../becca/entities/rows';
const ATTRIBUTE_TYPES = ['label', 'relation']; const ATTRIBUTE_TYPES = ['label', 'relation'];
/** @returns {BNote[]} */ function getNotesWithLabel(name: string, value?: string): BNote[] {
function getNotesWithLabel(name, value = undefined) { const query = attributeFormatter.formatAttrForSearch({type: 'label', name, value}, value !== undefined);
const query = formatAttrForSearch({type: 'label', name, value}, value !== undefined);
return searchService.searchNotes(query, { return searchService.searchNotes(query, {
includeArchivedNotes: true, includeArchivedNotes: true,
ignoreHoistedNote: true ignoreHoistedNote: true
@ -19,8 +20,7 @@ function getNotesWithLabel(name, value = undefined) {
} }
// TODO: should be in search service // TODO: should be in search service
/** @returns {BNote|null} */ function getNoteWithLabel(name: string, value?: string): BNote | null {
function getNoteWithLabel(name, value = undefined) {
// optimized version (~20 times faster) without using normal search, useful for e.g., finding date notes // optimized version (~20 times faster) without using normal search, useful for e.g., finding date notes
const attrs = becca.findAttributes('label', name); const attrs = becca.findAttributes('label', name);
@ -39,7 +39,7 @@ function getNoteWithLabel(name, value = undefined) {
return null; return null;
} }
function createLabel(noteId, name, value = "") { function createLabel(noteId: string, name: string, value: string = "") {
return createAttribute({ return createAttribute({
noteId: noteId, noteId: noteId,
type: 'label', type: 'label',
@ -48,7 +48,7 @@ function createLabel(noteId, name, value = "") {
}); });
} }
function createRelation(noteId, name, targetNoteId) { function createRelation(noteId: string, name: string, targetNoteId: string) {
return createAttribute({ return createAttribute({
noteId: noteId, noteId: noteId,
type: 'relation', type: 'relation',
@ -57,14 +57,14 @@ function createRelation(noteId, name, targetNoteId) {
}); });
} }
function createAttribute(attribute) { function createAttribute(attribute: AttributeRow) {
return new BAttribute(attribute).save(); return new BAttribute(attribute).save();
} }
function getAttributeNames(type, nameLike) { function getAttributeNames(type: string, nameLike: string) {
nameLike = nameLike.toLowerCase(); nameLike = nameLike.toLowerCase();
let names = sql.getColumn( let names = sql.getColumn<string>(
`SELECT DISTINCT name `SELECT DISTINCT name
FROM attributes FROM attributes
WHERE isDeleted = 0 WHERE isDeleted = 0
@ -98,11 +98,11 @@ function getAttributeNames(type, nameLike) {
return names; return names;
} }
function isAttributeType(type) { function isAttributeType(type: string): boolean {
return ATTRIBUTE_TYPES.includes(type); return ATTRIBUTE_TYPES.includes(type);
} }
function isAttributeDangerous(type, name) { function isAttributeDangerous(type: string, name: string): boolean {
return BUILTIN_ATTRIBUTES.some(attr => return BUILTIN_ATTRIBUTES.some(attr =>
attr.type === type && attr.type === type &&
attr.name.toLowerCase() === name.trim().toLowerCase() && attr.name.toLowerCase() === name.trim().toLowerCase() &&
@ -110,7 +110,7 @@ function isAttributeDangerous(type, name) {
); );
} }
module.exports = { export = {
getNotesWithLabel, getNotesWithLabel,
getNoteWithLabel, getNoteWithLabel,
createLabel, createLabel,

View File

@ -2,7 +2,7 @@ const log = require('./log');
const noteService = require('./notes'); const noteService = require('./notes');
const sql = require('./sql'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const attributeService = require('./attributes.js'); const attributeService = require('./attributes');
const dateNoteService = require('./date_notes.js'); const dateNoteService = require('./date_notes.js');
const treeService = require('./tree.js'); const treeService = require('./tree.js');
const config = require('./config'); const config = require('./config');

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
const noteService = require('./notes'); const noteService = require('./notes');
const attributeService = require('./attributes.js'); const attributeService = require('./attributes');
const dateUtils = require('./date_utils'); const dateUtils = require('./date_utils');
const sql = require('./sql'); const sql = require('./sql');
const protectedSessionService = require('./protected_session'); const protectedSessionService = require('./protected_session');

View File

@ -4,7 +4,7 @@ const BAttribute = require('../../becca/entities/battribute');
const utils = require('../../services/utils'); const utils = require('../../services/utils');
const log = require('../../services/log'); const log = require('../../services/log');
const noteService = require('../../services/notes'); const noteService = require('../../services/notes');
const attributeService = require('../../services/attributes.js'); const attributeService = require('../../services/attributes');
const BBranch = require('../../becca/entities/bbranch'); const BBranch = require('../../becca/entities/bbranch');
const path = require('path'); const path = require('path');
const protectedSessionService = require('../protected_session'); const protectedSessionService = require('../protected_session');

View File

@ -3,7 +3,7 @@ const cls = require('./cls');
const sqlInit = require('./sql_init'); const sqlInit = require('./sql_init');
const config = require('./config'); const config = require('./config');
const log = require('./log'); const log = require('./log');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes');
const protectedSessionService = require('../services/protected_session'); const protectedSessionService = require('../services/protected_session');
const hiddenSubtreeService = require('./hidden_subtree'); const hiddenSubtreeService = require('./hidden_subtree');

View File

@ -1,4 +1,4 @@
const attributeService = require('./attributes.js'); const attributeService = require('./attributes');
const dateNoteService = require('./date_notes.js'); const dateNoteService = require('./date_notes.js');
const becca = require('../becca/becca'); const becca = require('../becca/becca');
const noteService = require('./notes'); const noteService = require('./notes');

View File

@ -6,7 +6,7 @@
require('../becca/entity_constructor'); require('../becca/entity_constructor');
const sqlInit = require('../services/sql_init'); const sqlInit = require('../services/sql_init');
const noteService = require('../services/notes'); const noteService = require('../services/notes');
const attributeService = require('../services/attributes.js'); const attributeService = require('../services/attributes');
const cls = require('../services/cls'); const cls = require('../services/cls');
const cloningService = require('../services/cloning.js'); const cloningService = require('../services/cloning.js');
const loremIpsum = require('lorem-ipsum').loremIpsum; const loremIpsum = require('lorem-ipsum').loremIpsum;