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