fix export/import for multi-valued attributes

This commit is contained in:
azivner 2018-03-03 09:30:18 -05:00
parent d169f67901
commit 8c7d159012
3 changed files with 19 additions and 7 deletions

View File

@ -3,21 +3,22 @@
const express = require('express'); const express = require('express');
const router = express.Router(); const router = express.Router();
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const attributes = require('../../services/attributes');
const html = require('html'); const html = require('html');
const auth = require('../../services/auth'); const auth = require('../../services/auth');
const wrap = require('express-promise-wrap').wrap; const wrap = require('express-promise-wrap').wrap;
const tar = require('tar-stream'); const tar = require('tar-stream');
const sanitize = require("sanitize-filename"); const sanitize = require("sanitize-filename");
const Repository = require("../../services/repository");
router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next) => { router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next) => {
const noteId = req.params.noteId; const noteId = req.params.noteId;
const repo = new Repository(req);
const noteTreeId = await sql.getValue('SELECT noteTreeId FROM note_tree WHERE noteId = ?', [noteId]); const noteTreeId = await sql.getValue('SELECT noteTreeId FROM note_tree WHERE noteId = ?', [noteId]);
const pack = tar.pack(); const pack = tar.pack();
const name = await exportNote(noteTreeId, '', pack); const name = await exportNote(noteTreeId, '', pack, repo);
pack.finalize(); pack.finalize();
@ -27,9 +28,9 @@ router.get('/:noteId/', auth.checkApiAuthOrElectron, wrap(async (req, res, next)
pack.pipe(res); pack.pipe(res);
})); }));
async function exportNote(noteTreeId, directory, pack) { async function exportNote(noteTreeId, directory, pack, repo) {
const noteTree = await sql.getRow("SELECT * FROM note_tree WHERE noteTreeId = ?", [noteTreeId]); const noteTree = await sql.getRow("SELECT * FROM note_tree WHERE noteTreeId = ?", [noteTreeId]);
const note = await sql.getRow("SELECT * FROM notes WHERE noteId = ?", [noteTree.noteId]); const note = await repo.getEntity("SELECT notes.* FROM notes WHERE noteId = ?", [noteTree.noteId]);
if (note.isProtected) { if (note.isProtected) {
return; return;
@ -54,7 +55,7 @@ async function exportNote(noteTreeId, directory, pack) {
if (children.length > 0) { if (children.length > 0) {
for (const child of children) { for (const child of children) {
await exportNote(child.noteTreeId, childFileName + "/", pack); await exportNote(child.noteTreeId, childFileName + "/", pack, repo);
} }
} }
@ -66,7 +67,12 @@ async function getMetadata(note) {
title: note.title, title: note.title,
type: note.type, type: note.type,
mime: note.mime, mime: note.mime,
attributes: await attributes.getNoteAttributeMap(note.noteId) attributes: (await note.getAttributes()).map(attr => {
return {
name: attr.name,
value: attr.value
};
})
}; };
} }

View File

@ -4,6 +4,7 @@ const express = require('express');
const router = express.Router(); const router = express.Router();
const sql = require('../../services/sql'); const sql = require('../../services/sql');
const auth = require('../../services/auth'); const auth = require('../../services/auth');
const attributes = require('../../services/attributes');
const notes = require('../../services/notes'); const notes = require('../../services/notes');
const wrap = require('express-promise-wrap').wrap; const wrap = require('express-promise-wrap').wrap;
const tar = require('tar-stream'); const tar = require('tar-stream');
@ -118,10 +119,13 @@ async function importNotes(files, parentNoteId, sourceId) {
const noteId = await notes.createNote(parentNoteId, file.meta.title, file.data, { const noteId = await notes.createNote(parentNoteId, file.meta.title, file.data, {
type: file.meta.type, type: file.meta.type,
mime: file.meta.mime, mime: file.meta.mime,
attributes: file.meta.attributes,
sourceId: sourceId sourceId: sourceId
}); });
for (const attr of file.meta.attributes) {
await attributes.createAttribute(noteId, attr.name, attr.value);
}
if (file.children.length > 0) { if (file.children.length > 0) {
await importNotes(file.children, noteId, sourceId); await importNotes(file.children, noteId, sourceId);
} }

View File

@ -62,12 +62,14 @@ async function createAttribute(noteId, name, value = "", sourceId = null) {
const now = utils.nowDate(); const now = utils.nowDate();
const attributeId = utils.newAttributeId(); const attributeId = utils.newAttributeId();
const position = 1 + await sql.getValue(`SELECT COALESCE(MAX(position), 0) FROM attributes WHERE noteId = ?`, [noteId]);
await sql.insert("attributes", { await sql.insert("attributes", {
attributeId: attributeId, attributeId: attributeId,
noteId: noteId, noteId: noteId,
name: name, name: name,
value: value, value: value,
position: position,
dateModified: now, dateModified: now,
dateCreated: now, dateCreated: now,
isDeleted: false isDeleted: false