From aad5ea577fa6365224522c85ad6ca05da856be1b Mon Sep 17 00:00:00 2001 From: azivner Date: Wed, 24 Jan 2018 23:08:14 -0500 Subject: [PATCH] refactored "date note" functions out of reddit plugin --- plugins/reddit.js | 94 ++--------------------------------- services/date_notes.js | 110 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 91 deletions(-) create mode 100644 services/date_notes.js diff --git a/plugins/reddit.js b/plugins/reddit.js index f12826cef..6c798251d 100644 --- a/plugins/reddit.js +++ b/plugins/reddit.js @@ -9,11 +9,7 @@ const unescape = require('unescape'); const attributes = require('../services/attributes'); const sync_mutex = require('../services/sync_mutex'); const config = require('../services/config'); - -const CALENDAR_ROOT_ATTRIBUTE = 'calendar_root'; -const YEAR_ATTRIBUTE = 'year_note'; -const MONTH_ATTRIBUTE = 'month_note'; -const DATE_ATTRIBUTE = 'date_note'; +const date_notes = require('../services/date_notes'); // "reddit" date note is subnote of date note which contains all reddit comments from that date const REDDIT_DATE_ATTRIBUTE = 'reddit_date_note'; @@ -31,97 +27,13 @@ function redditId(kind, id) { return kind + "_" + id; } -async function getNoteStartingWith(parentNoteId, startsWith) { - return await sql.getFirstValue(`SELECT note_id FROM notes JOIN notes_tree USING(note_id) - WHERE parent_note_id = ? AND note_title LIKE '${startsWith}%' - AND notes.is_deleted = 0 AND is_protected = 0 - AND notes_tree.is_deleted = 0`, [parentNoteId]); -} - -async function getRootNoteId() { - let rootNoteId = await sql.getFirstValue(`SELECT notes.note_id FROM notes JOIN attributes USING(note_id) - WHERE attributes.name = '${CALENDAR_ROOT_ATTRIBUTE}' AND notes.is_deleted = 0`); - - if (!rootNoteId) { - rootNoteId = (await notes.createNewNote('root', { - note_title: 'Calendar', - target: 'into', - is_protected: false - })).noteId; - - await attributes.createAttribute(rootNoteId, CALENDAR_ROOT_ATTRIBUTE); - } - - return rootNoteId; -} - -async function getYearNoteId(dateTimeStr, rootNoteId) { - const yearStr = dateTimeStr.substr(0, 4); - - let yearNoteId = await attributes.getNoteIdWithAttribute(YEAR_ATTRIBUTE, yearStr); - - if (!yearNoteId) { - yearNoteId = await getNoteStartingWith(rootNoteId, yearStr); - - if (!yearNoteId) { - yearNoteId = await createNote(rootNoteId, yearStr); - } - - await attributes.createAttribute(yearNoteId, YEAR_ATTRIBUTE, yearStr); - } - - return yearNoteId; -} - -async function getMonthNoteId(dateTimeStr, rootNoteId) { - const monthStr = dateTimeStr.substr(0, 7); - const monthNumber = dateTimeStr.substr(5, 2); - - let monthNoteId = await attributes.getNoteIdWithAttribute(MONTH_ATTRIBUTE, monthStr); - - if (!monthNoteId) { - const yearNoteId = await getYearNoteId(dateTimeStr, rootNoteId); - - monthNoteId = await getNoteStartingWith(yearNoteId, monthNumber); - - if (!monthNoteId) { - monthNoteId = await createNote(yearNoteId, monthNumber); - } - - await attributes.createAttribute(monthNoteId, MONTH_ATTRIBUTE, monthStr); - } - - return monthNoteId; -} - -async function getDateNoteId(dateTimeStr, rootNoteId) { - const dateStr = dateTimeStr.substr(0, 10); - const dayNumber = dateTimeStr.substr(8, 2); - - let dateNoteId = await attributes.getNoteIdWithAttribute(DATE_ATTRIBUTE, dateStr); - - if (!dateNoteId) { - const monthNoteId = await getMonthNoteId(dateTimeStr, rootNoteId); - - dateNoteId = await getNoteStartingWith(monthNoteId, dayNumber); - - if (!dateNoteId) { - dateNoteId = await createNote(monthNoteId, dayNumber); - } - - await attributes.createAttribute(dateNoteId, DATE_ATTRIBUTE, dateStr); - } - - return dateNoteId; -} - async function getDateNoteIdForReddit(dateTimeStr, rootNoteId) { const dateStr = dateTimeStr.substr(0, 10); let redditDateNoteId = await attributes.getNoteIdWithAttribute(REDDIT_DATE_ATTRIBUTE, dateStr); if (!redditDateNoteId) { - const dateNoteId = await getDateNoteId(dateTimeStr, rootNoteId); + const dateNoteId = await date_notes.getDateNoteId(dateTimeStr, rootNoteId); redditDateNoteId = await createNote(dateNoteId, "Reddit"); @@ -196,7 +108,7 @@ karma: ${comment.score}, created at ${dateTimeStr}

` let redditAccounts = []; async function runImport() { - const rootNoteId = await getRootNoteId(); + const rootNoteId = await date_notes.getRootNoteId(); // technically mutex shouldn't be necessary but we want to avoid doing potentially expensive import // concurrently with sync diff --git a/services/date_notes.js b/services/date_notes.js new file mode 100644 index 000000000..3cecdd41e --- /dev/null +++ b/services/date_notes.js @@ -0,0 +1,110 @@ +"use strict"; + +const sql = require('./sql'); +const notes = require('./notes'); +const attributes = require('./attributes'); + +const CALENDAR_ROOT_ATTRIBUTE = 'calendar_root'; +const YEAR_ATTRIBUTE = 'year_note'; +const MONTH_ATTRIBUTE = 'month_note'; +const DATE_ATTRIBUTE = 'date_note'; + +async function createNote(parentNoteId, noteTitle, noteText) { + return (await notes.createNewNote(parentNoteId, { + note_title: noteTitle, + note_text: noteText, + target: 'into', + is_protected: false + })).noteId; +} + +async function getNoteStartingWith(parentNoteId, startsWith) { + return await sql.getFirstValue(`SELECT note_id FROM notes JOIN notes_tree USING(note_id) + WHERE parent_note_id = ? AND note_title LIKE '${startsWith}%' + AND notes.is_deleted = 0 AND is_protected = 0 + AND notes_tree.is_deleted = 0`, [parentNoteId]); +} + +async function getRootNoteId() { + let rootNoteId = await sql.getFirstValue(`SELECT notes.note_id FROM notes JOIN attributes USING(note_id) + WHERE attributes.name = '${CALENDAR_ROOT_ATTRIBUTE}' AND notes.is_deleted = 0`); + + if (!rootNoteId) { + rootNoteId = (await notes.createNewNote('root', { + note_title: 'Calendar', + target: 'into', + is_protected: false + })).noteId; + + await attributes.createAttribute(rootNoteId, CALENDAR_ROOT_ATTRIBUTE); + } + + return rootNoteId; +} + +async function getYearNoteId(dateTimeStr, rootNoteId) { + const yearStr = dateTimeStr.substr(0, 4); + + let yearNoteId = await attributes.getNoteIdWithAttribute(YEAR_ATTRIBUTE, yearStr); + + if (!yearNoteId) { + yearNoteId = await getNoteStartingWith(rootNoteId, yearStr); + + if (!yearNoteId) { + yearNoteId = await createNote(rootNoteId, yearStr); + } + + await attributes.createAttribute(yearNoteId, YEAR_ATTRIBUTE, yearStr); + } + + return yearNoteId; +} + +async function getMonthNoteId(dateTimeStr, rootNoteId) { + const monthStr = dateTimeStr.substr(0, 7); + const monthNumber = dateTimeStr.substr(5, 2); + + let monthNoteId = await attributes.getNoteIdWithAttribute(MONTH_ATTRIBUTE, monthStr); + + if (!monthNoteId) { + const yearNoteId = await getYearNoteId(dateTimeStr, rootNoteId); + + monthNoteId = await getNoteStartingWith(yearNoteId, monthNumber); + + if (!monthNoteId) { + monthNoteId = await createNote(yearNoteId, monthNumber); + } + + await attributes.createAttribute(monthNoteId, MONTH_ATTRIBUTE, monthStr); + } + + return monthNoteId; +} + +async function getDateNoteId(dateTimeStr, rootNoteId) { + const dateStr = dateTimeStr.substr(0, 10); + const dayNumber = dateTimeStr.substr(8, 2); + + let dateNoteId = await attributes.getNoteIdWithAttribute(DATE_ATTRIBUTE, dateStr); + + if (!dateNoteId) { + const monthNoteId = await getMonthNoteId(dateTimeStr, rootNoteId); + + dateNoteId = await getNoteStartingWith(monthNoteId, dayNumber); + + if (!dateNoteId) { + dateNoteId = await createNote(monthNoteId, dayNumber); + } + + await attributes.createAttribute(dateNoteId, DATE_ATTRIBUTE, dateStr); + } + + return dateNoteId; +} + +module.exports = { + getRootNoteId, + getYearNoteId, + getMonthNoteId, + getDateNoteId +}; \ No newline at end of file