Skip to content

Commit 2b7d3a3

Browse files
author
Lasim
committed
feat(plugin): enhance onDatabaseInit to include logger for better debugging
1 parent 197dd8b commit 2b7d3a3

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

services/backend/src/db/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ export function executeDbOperation<T>(
520520
interface DatabaseExtensionWithTables extends DatabaseExtension {
521521

522522
tableDefinitions?: Record<string, Record<string, (columnBuilder: any) => any>>;
523-
onDatabaseInit?: (db: AnyDatabase, schema: AnySchema) => Promise<void>;
523+
onDatabaseInit?: (db: AnyDatabase, schema: AnySchema, logger: FastifyBaseLogger) => Promise<void>;
524524
}
525525

526526
export function registerPluginTables(plugins: Plugin[], logger?: FastifyBaseLogger) {
@@ -560,7 +560,7 @@ export async function initializePluginDatabases(db: AnyDatabase, plugins: Plugin
560560
}
561561
try {
562562
// Create a child logger for this plugin
563-
logger.child({ pluginId: plugin.meta.id });
563+
const pluginLogger = logger.child({ pluginId: plugin.meta.id });
564564
// Get the current schema - use dbSchema directly if available, otherwise generate one
565565
let schema: AnySchema;
566566
try {
@@ -569,7 +569,7 @@ export async function initializePluginDatabases(db: AnyDatabase, plugins: Plugin
569569
// If getSchema fails, generate a basic schema for the plugin
570570
schema = generateSchema();
571571
}
572-
await ext.onDatabaseInit(db, schema);
572+
await ext.onDatabaseInit(db, schema, pluginLogger);
573573
if (!isTestMode()) {
574574
logger.info({
575575
operation: 'initialize_plugin_databases',

services/backend/src/plugin-system/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export interface DatabaseExtension {
7777
* Can be used for seeding or additional setup.
7878
* This is called only if the main database initializes successfully.
7979
*/
80-
onDatabaseInit?: (db: AnyDatabase, logger: FastifyBaseLogger) => Promise<void>; // db here will be non-null
80+
onDatabaseInit?: (db: AnyDatabase, schema: any, logger: FastifyBaseLogger) => Promise<void>; // db here will be non-null
8181
}
8282

8383
/**

services/backend/src/plugins/example-plugin/index.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,23 @@ class ExamplePlugin implements Plugin {
9797
tableDefinitions: examplePluginTableDefinitions, // Use tableDefinitions
9898

9999
// Optional initialization function
100-
onDatabaseInit: async (db: AnyDatabase, schema: AnySchema) => {
101-
// Note: The function signature expects (db, schema) not (db, logger)
102-
// We'll use console.log for now since logger is not available
103-
console.log('Initializing example plugin database...');
100+
onDatabaseInit: async (db: AnyDatabase, schema: AnySchema, logger: FastifyBaseLogger) => {
101+
logger.debug({
102+
operation: 'plugin_database_init',
103+
pluginId: 'example-plugin'
104+
}, 'Initializing example plugin database...');
104105

105106
// Use hardcoded plugin ID since 'this' is not available in arrow function
106107
const tableNameInSchema = `example-plugin_example_entities`;
107108
const table = schema[tableNameInSchema];
108109

109110
if (!table) {
110-
console.error('Critical: Table not found in global schema! Cannot initialize database for plugin.', {
111+
logger.error({
112+
operation: 'plugin_database_init',
113+
pluginId: 'example-plugin',
111114
tableNameInSchema,
112115
availableTables: Object.keys(schema)
113-
});
116+
}, 'Critical: Table not found in global schema! Cannot initialize database for plugin.');
114117
return;
115118
}
116119

@@ -130,7 +133,10 @@ class ExamplePlugin implements Plugin {
130133
}
131134

132135
if (currentCount === 0) {
133-
console.log('Seeding initial data for example plugin...');
136+
logger.debug({
137+
operation: 'plugin_database_seed',
138+
pluginId: 'example-plugin'
139+
}, 'Seeding initial data for example plugin...');
134140
const dataToSeed = {
135141
id: 'example1',
136142
name: 'Example Entity',
@@ -142,7 +148,10 @@ class ExamplePlugin implements Plugin {
142148
// Assume NodePgDatabase-like behavior
143149
await (db as NodePgDatabase).insert(table as PgTable).values(dataToSeed);
144150
}
145-
console.log('Seeded initial data for example plugin');
151+
logger.info({
152+
operation: 'plugin_database_seed',
153+
pluginId: 'example-plugin'
154+
}, 'Seeded initial data for example plugin');
146155
}
147156
},
148157
};

0 commit comments

Comments
 (0)