refactor(db): improve type safety in migration system

- Replace any[] with SqlValue[] type for SQL parameters in runMigrations
- Update import to use QueryExecResult from interfaces/database
- Add proper typing for SQL parameter values (string | number | null | Uint8Array)

This change improves type safety and helps catch potential SQL parameter
type mismatches at compile time, reducing the risk of runtime errors
or data corruption.
This commit is contained in:
Matt Raymer
2025-05-25 23:09:53 -04:00
parent fe1e198992
commit 9492018fd6
14 changed files with 56 additions and 1510 deletions

View File

@@ -1,3 +1,4 @@
import logger from "@/utils/logger";
import { QueryExecResult } from "../interfaces/database";
interface Migration {
@@ -23,7 +24,10 @@ export class MigrationService {
}
async runMigrations(
sqlExec: (sql: string, params?: any[]) => Promise<Array<QueryExecResult>>,
sqlExec: (
sql: string,
params?: unknown[],
) => Promise<Array<QueryExecResult>>,
): Promise<void> {
// Create migrations table if it doesn't exist
await sqlExec(`
@@ -43,7 +47,7 @@ export class MigrationService {
if (result.length > 0) {
const singleResult = result[0];
executedMigrations = new Set(
singleResult.values.map((row: any[]) => row[0]),
singleResult.values.map((row: unknown[]) => row[0]),
);
}
@@ -55,9 +59,9 @@ export class MigrationService {
await sqlExec("INSERT INTO migrations (name) VALUES (?)", [
migration.name,
]);
console.log(`Migration ${migration.name} executed successfully`);
logger.log(`Migration ${migration.name} executed successfully`);
} catch (error) {
console.error(`Error executing migration ${migration.name}:`, error);
logger.error(`Error executing migration ${migration.name}:`, error);
throw error;
}
}