Syntax changes in front and back end dirs. These do not affect functionality and are purely intended to better capture and describe the app's functionality and purpose
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
import logger from '../logger.js';
|
||||
import * as notebookStore from '../stores/notebookStore.js';
|
||||
import * as sourceCorpusStore from '../stores/sourceCorpusStore.js';
|
||||
import * as documentCacheStore from '../stores/documentCacheStore.js';
|
||||
import {
|
||||
generateStudyGuide,
|
||||
@@ -29,45 +29,45 @@ const DEBOUNCE_MS = 5000;
|
||||
const pendingReGen = new Set<string>();
|
||||
const debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();
|
||||
|
||||
export function triggerPreGeneration(notebookId: string): void {
|
||||
const notebook = notebookStore.getNotebook(notebookId);
|
||||
if (!notebook) return;
|
||||
export function triggerPreGeneration(sourceCorpusId: string): void {
|
||||
const sourceCorpus = sourceCorpusStore.getSourceCorpus(sourceCorpusId);
|
||||
if (!sourceCorpus) return;
|
||||
|
||||
const sources = notebookStore.getSources(notebookId);
|
||||
const sources = sourceCorpusStore.getSources(sourceCorpusId);
|
||||
if (sources.length < MIN_SOURCES) return;
|
||||
|
||||
if (documentCacheStore.isGenerating(notebookId)) {
|
||||
pendingReGen.add(notebookId);
|
||||
documentCacheStore.invalidate(notebookId);
|
||||
logger.debug({ notebookId }, 'pre-generation in progress, queued re-generation');
|
||||
if (documentCacheStore.isGenerating(sourceCorpusId)) {
|
||||
pendingReGen.add(sourceCorpusId);
|
||||
documentCacheStore.invalidate(sourceCorpusId);
|
||||
logger.debug({ sourceCorpusId }, 'pre-generation in progress, queued re-generation');
|
||||
return;
|
||||
}
|
||||
|
||||
const existingTimer = debounceTimers.get(notebookId);
|
||||
const existingTimer = debounceTimers.get(sourceCorpusId);
|
||||
if (existingTimer !== undefined) {
|
||||
clearTimeout(existingTimer);
|
||||
}
|
||||
debounceTimers.set(
|
||||
notebookId,
|
||||
sourceCorpusId,
|
||||
setTimeout(() => {
|
||||
debounceTimers.delete(notebookId);
|
||||
runPreGeneration(notebookId);
|
||||
debounceTimers.delete(sourceCorpusId);
|
||||
runPreGeneration(sourceCorpusId);
|
||||
}, DEBOUNCE_MS)
|
||||
);
|
||||
logger.debug({ notebookId, debounceMs: DEBOUNCE_MS }, 'pre-generation debounced');
|
||||
logger.debug({ sourceCorpusId, debounceMs: DEBOUNCE_MS }, 'pre-generation debounced');
|
||||
}
|
||||
|
||||
function runPreGeneration(notebookId: string): void {
|
||||
function runPreGeneration(sourceCorpusId: string): void {
|
||||
try {
|
||||
const sources = notebookStore.getSources(notebookId);
|
||||
const chunks = notebookStore.getChunksForNotebook(notebookId);
|
||||
const sourceGroups = notebookStore.buildSourceGroups(notebookId, chunks) as SourceGroup[];
|
||||
const sources = sourceCorpusStore.getSources(sourceCorpusId);
|
||||
const chunks = sourceCorpusStore.getChunksForSourceCorpus(sourceCorpusId);
|
||||
const sourceGroups = sourceCorpusStore.buildSourceGroups(sourceCorpusId, chunks) as SourceGroup[];
|
||||
|
||||
documentCacheStore.invalidate(notebookId);
|
||||
documentCacheStore.markGenerating(notebookId);
|
||||
documentCacheStore.invalidate(sourceCorpusId);
|
||||
documentCacheStore.markGenerating(sourceCorpusId);
|
||||
|
||||
logger.info(
|
||||
{ notebookId, sourceCount: sources.length, chunkCount: chunks.length },
|
||||
{ sourceCorpusId, sourceCount: sources.length, chunkCount: chunks.length },
|
||||
'background pre-generation started'
|
||||
);
|
||||
|
||||
@@ -75,31 +75,31 @@ function runPreGeneration(notebookId: string): void {
|
||||
async ([type, generator]) => {
|
||||
try {
|
||||
const document = await generator(sourceGroups);
|
||||
documentCacheStore.setCachedDocument(notebookId, type, document, sources);
|
||||
logger.info({ notebookId, type }, 'background pre-generation complete for type');
|
||||
documentCacheStore.setCachedDocument(sourceCorpusId, type, document, sources);
|
||||
logger.info({ sourceCorpusId, type }, 'background pre-generation complete for type');
|
||||
} catch (err) {
|
||||
const error = err as Error;
|
||||
logger.error({ notebookId, type, err: error.message }, 'background pre-generation failed for type');
|
||||
logger.error({ sourceCorpusId, type, err: error.message }, 'background pre-generation failed for type');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Promise.all(jobs)
|
||||
.then(() => {
|
||||
logger.info({ notebookId }, 'all background pre-generation complete');
|
||||
logger.info({ sourceCorpusId }, 'all background pre-generation complete');
|
||||
})
|
||||
.finally(() => {
|
||||
documentCacheStore.clearGenerating(notebookId);
|
||||
documentCacheStore.clearGenerating(sourceCorpusId);
|
||||
|
||||
if (pendingReGen.has(notebookId)) {
|
||||
pendingReGen.delete(notebookId);
|
||||
logger.info({ notebookId }, 're-triggering pre-generation for updated sources');
|
||||
runPreGeneration(notebookId);
|
||||
if (pendingReGen.has(sourceCorpusId)) {
|
||||
pendingReGen.delete(sourceCorpusId);
|
||||
logger.info({ sourceCorpusId }, 're-triggering pre-generation for updated sources');
|
||||
runPreGeneration(sourceCorpusId);
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
const error = err as Error;
|
||||
logger.error({ notebookId, err: error.message }, 'pre-generation setup failed');
|
||||
documentCacheStore.clearGenerating(notebookId);
|
||||
logger.error({ sourceCorpusId, err: error.message }, 'pre-generation setup failed');
|
||||
documentCacheStore.clearGenerating(sourceCorpusId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user