From 0e04a8ed0440cb3b16c4dd13ad3275f97afba539 Mon Sep 17 00:00:00 2001 From: Andrzej Stepien Date: Sat, 12 Aug 2023 18:41:50 +0200 Subject: [PATCH] getting the buffer working --- checkAndPublish.mjs | 11 ++++--- database-calls/db.mjs | 73 ++++++++++++++++++++++++++++++++++++++----- getNewPrompt.mjs | 2 +- 3 files changed, 73 insertions(+), 13 deletions(-) diff --git a/checkAndPublish.mjs b/checkAndPublish.mjs index 3955993..8159361 100644 --- a/checkAndPublish.mjs +++ b/checkAndPublish.mjs @@ -3,22 +3,23 @@ import createNote from "./firefish-calls/createNote.mjs" import makeText from "./makeText.mjs" import insertPublished from "./database-calls/insertPublished.mjs" import logger from "./logger.mjs" -import {todaysPromptAlreadyPublished} from "./database-calls/db.mjs" +import {todaysPromptAlreadyPublished, tableIsNotEmpty, getPromptFromBuffer} from "./database-calls/db.mjs" export default async function checkAndPublish () { logger.trace("checkAndPublish called") logger.trace(todaysPromptAlreadyPublished()) if(!await todaysPromptAlreadyPublished()){ - try { - const prompt = await getNewPrompt() - logger.trace("getNewPrompt successful!") + try { + const prompt = await tableIsNotEmpty('buffer') ? await getPromptFromBuffer() : await getNewPrompt() + logger.trace("prompt acquired successfully!") try { const text = makeText(prompt) try { const note = await createNote(text) logger.trace("createNote successful!") try { + //DELETE FROM BUFFER await insertPublished(note, prompt.word) logger.trace("insertPublished successful!") } catch (error) { @@ -31,7 +32,7 @@ export default async function checkAndPublish () { logger.error(error, 'makeText failed!') } } catch (error) { - logger.error(error,'getNewPrompt failed!') + logger.error(error,'failed to get prompt!') } } else { logger.trace("today's prompt has already been published") diff --git a/database-calls/db.mjs b/database-calls/db.mjs index b01a092..80713ef 100644 --- a/database-calls/db.mjs +++ b/database-calls/db.mjs @@ -1,6 +1,7 @@ import Knex from 'knex' import logger from '../logger.mjs' import { isoDate } from "../utilities.mjs" +import config from "../config.mjs" export const db = Knex({ client: 'sqlite3', // or 'better-sqlite3' @@ -9,6 +10,36 @@ export const db = Knex({ }, useNullAsDefault: true }) +const blocklist = db.union([ + db('bad_words').select('word'), + db('medical_dictionary').select('word'), + db('published').select('word') +]) + +export const getAcceptablePrompts = async (word) => { + logger.trace("getAcceptablePrompt called") + try { + return db('dictionary') + .select('*') + .where({ + derivative: 0, + scientific: 0, + }) + .modify(queryBuilder=>{ + if(word){queryBuilder.andWhere('word',word)} + }) + .andWhere('count', '<', config.maxCount) + .andWhere('count', '>', config.minCount) + .andWhere('word', 'not in', blocklist) + .whereRaw('length(word) > 3') + .whereNotNull('pronunciation') + .orderByRaw('count desc') + } catch (error) { + logger.error("getAcceptablePrompts failed!") + throw error + } +} + export const getWords = async () => { logger.trace("getWords called") @@ -18,24 +49,52 @@ export const getWords = async () => { .catch(error => { throw error }) } -export const valueExistsInTable = async (table, column, value) => { + + + + +export const valueExistsInColumn = async (table, column, value) => { try { const number = await db(table) .count('* as count') .where(column, value) - return number[0].count > 0 + return number[0].count > 0 } catch (error) { - logger.error("valueExistsInTable failed!") + logger.error("valueExistsInColumn failed!") throw error } - + } export const todaysPromptAlreadyPublished = async () => { - return valueExistsInTable('published', 'date', isoDate()) + return valueExistsInColumn('published', 'date', isoDate()) } export const wordIsAlreadyInBuffer = async (word) => { - return valueExistsInTable('buffer', 'word', word) -} \ No newline at end of file + return valueExistsInColumn('buffer', 'word', word) +} + +export const tableIsNotEmpty = async (table) => { + try { + const number = await db(table) + .count('* as count') + return number[0].count > 0 + } catch (error) { + throw error + } +} + +export const getPromptFromBuffer = async () => { + logger.trace("getting prompt from buffer") + const oldestWordInBuffer = await db('buffer').select('word').orderBy('timestamp', 'asc').limit(1) + logger.info(`oldest word in buffer: ${oldestWordInBuffer[0].word}`) + try { + const prompt = await getAcceptablePrompts(oldestWordInBuffer[0].word) + return prompt[0] + } catch (error) { + logger.error("getPromptFromBuffer failed!") + throw error + } +} + diff --git a/getNewPrompt.mjs b/getNewPrompt.mjs index 85ffe34..f974d0f 100644 --- a/getNewPrompt.mjs +++ b/getNewPrompt.mjs @@ -1,5 +1,5 @@ import logger from "./logger.mjs" -import getAcceptablePrompts from "./database-calls/getAcceptablePrompts.mjs" +import { getAcceptablePrompts } from "./database-calls/db.mjs" import config from "./config.mjs" export default async function getNewPrompt() {