Fix remaining TypeScript 'Untyped function calls' errors

- Add DatabaseAdapter type imports where needed
- Properly type database adapter calls with type assertions
- Fix type mismatches in schemaMappingService
- Fix ensureInitialized calls on DatabaseAdapter
This commit is contained in:
2026-01-21 09:39:58 +01:00
parent 6bb5907bbd
commit 9ad4bd9a73
6 changed files with 35 additions and 19 deletions

View File

@@ -249,7 +249,7 @@ app.listen(PORT, async () => {
if (db) {
await db.ensureInitialized?.();
try {
const schemaRow = await (db as any).queryOne<{ count: number }>(
const schemaRow = await (db.queryOne as <T>(sql: string, params?: any[]) => Promise<T | null>)<{ count: number }>(
`SELECT COUNT(*) as count FROM schemas`
);
hasSchemas = (schemaRow?.count || 0) > 0;

View File

@@ -8,6 +8,7 @@ import { logger } from './logger.js';
import { normalizedCacheStore as cacheStore } from './normalizedCacheStore.js';
import { jiraAssetsClient, JiraObjectNotFoundError } from './jiraAssetsClient.js';
import type { CMDBObject } from '../generated/jira-types.js';
import type { DatabaseAdapter } from './database/interface.js';
export interface BrokenReference {
object_id: string;
@@ -150,7 +151,8 @@ class DataIntegrityService {
// 1. Check cache first
const db = (cacheStore as any).db;
if (db) {
const objRow = await db.queryOne<{
const typedDb = db as DatabaseAdapter;
const objRow = await typedDb.queryOne<{
id: string;
object_type_name: string;
}>(`

View File

@@ -12,6 +12,7 @@ import { normalizedCacheStore } from './normalizedCacheStore.js';
import { jiraAssetsClient } from './jiraAssetsClient.js';
import { jiraAssetsService } from './jiraAssets.js';
import { logger } from './logger.js';
import type { DatabaseAdapter } from './database/interface.js';
import type {
ApplicationComponent,
IctGovernanceModel,
@@ -126,7 +127,8 @@ async function getDescriptionFromDatabase(objectId: string): Promise<string | nu
const descriptionFieldNames = ['description', 'Description', 'DESCRIPTION'];
// First, get the object to find its type
const objRow = await db.queryOne<{ object_type_name: string }>(`
const typedDb = db as DatabaseAdapter;
const objRow = await typedDb.queryOne<{ object_type_name: string }>(`
SELECT object_type_name FROM objects WHERE id = ?
`, [objectId]);
@@ -134,7 +136,7 @@ async function getDescriptionFromDatabase(objectId: string): Promise<string | nu
// Try each possible description field name
for (const fieldName of descriptionFieldNames) {
const descRow = await db.queryOne<{ text_value: string }>(`
const descRow = await typedDb.queryOne<{ text_value: string }>(`
SELECT av.text_value
FROM attribute_values av
JOIN attributes a ON av.attribute_id = a.id
@@ -173,7 +175,8 @@ async function toReferenceValue(ref: ObjectReference | null | undefined): Promis
await db.ensureInitialized?.();
// Get basic object info from database
const objRow = await db.queryOne<{
const typedDb = db as DatabaseAdapter;
const objRow = await typedDb.queryOne<{
id: string;
object_key: string;
label: string;

View File

@@ -7,14 +7,15 @@
import { logger } from '../logger.js';
import { normalizedCacheStore } from '../normalizedCacheStore.js';
import type { DatabaseAdapter } from './interface.js';
export async function fixObjectTypesConstraints(): Promise<void> {
const db = (normalizedCacheStore as any).db;
const db = (normalizedCacheStore as any).db as DatabaseAdapter;
if (!db) {
throw new Error('Database not available');
}
await db.ensureInitialized?.();
await (db as any).ensureInitialized?.();
logger.info('Migration: Fixing UNIQUE constraints on object_types table...');

View File

@@ -16,6 +16,7 @@ import type {
TeamDashboardData,
} from '../types/index.js';
import type { CMDBObjectTypeName } from '../generated/jira-types.js';
import type { DatabaseAdapter } from './database/interface.js';
// Attribute name mappings (these should match your Jira Assets schema)
const ATTRIBUTE_NAMES = {
@@ -126,7 +127,8 @@ class JiraAssetsService {
if (!db) return null;
await db.ensureInitialized?.();
const schemaRow = await db.queryOne<{ jira_schema_id: string }>(
const typedDb = db as DatabaseAdapter;
const schemaRow = await typedDb.queryOne<{ jira_schema_id: string }>(
`SELECT jira_schema_id FROM schemas ORDER BY jira_schema_id LIMIT 1`
);
return schemaRow?.jira_schema_id || null;
@@ -146,9 +148,10 @@ class JiraAssetsService {
if (!db) return [];
await db.ensureInitialized?.();
const schemaRows = await db.query<{ jira_schema_id: string }>(
const typedDb = db as DatabaseAdapter;
const schemaRows = await typedDb.query<{ jira_schema_id: string }>(
`SELECT DISTINCT jira_schema_id FROM schemas WHERE search_enabled = ? ORDER BY jira_schema_id`,
[db.isPostgres ? true : 1]
[typedDb.isPostgres ? true : 1]
);
return schemaRows.map((row: { jira_schema_id: string }) => row.jira_schema_id);
} catch (error) {

View File

@@ -9,6 +9,7 @@ import { logger } from './logger.js';
import { normalizedCacheStore } from './normalizedCacheStore.js';
import { config } from '../config/env.js';
import type { CMDBObjectTypeName } from '../generated/jira-types.js';
import type { DatabaseAdapter } from './database/interface.js';
export interface SchemaMapping {
objectTypeName: string;
@@ -61,7 +62,8 @@ class SchemaMappingService {
await db.ensureInitialized?.();
const rows = await db.query<{
const typedDb = db as DatabaseAdapter;
const rows = await typedDb.query<{
object_type_name: string;
schema_id: string;
enabled: boolean | number;
@@ -158,7 +160,8 @@ class SchemaMappingService {
const db = (normalizedCacheStore as any).db;
if (db) {
await db.ensureInitialized?.();
const row = await db.queryOne<{ enabled: boolean | number }>(`
const typedDb = db as DatabaseAdapter;
const row = await typedDb.queryOne<{ enabled: boolean | number }>(`
SELECT enabled FROM schema_mappings WHERE object_type_name = ?
`, [objectTypeName]);
@@ -195,7 +198,8 @@ class SchemaMappingService {
await db.ensureInitialized?.();
// Use parameterized query to avoid boolean/integer comparison issues
const rows = await db.query<{
const typedDb = db as DatabaseAdapter;
const rows = await typedDb.query<{
object_type_name: string;
schema_id: string;
enabled: boolean | number;
@@ -243,7 +247,8 @@ class SchemaMappingService {
try {
// Get all object types with their mappings
const rows = await db.query<{
const typedDb = db as DatabaseAdapter;
const rows = await typedDb.query<{
type_name: string;
display_name: string;
description: string | null;
@@ -274,7 +279,8 @@ class SchemaMappingService {
const db = (normalizedCacheStore as any).db;
if (db) {
await db.ensureInitialized?.();
const schemaRow = await db.queryOne<{ jira_schema_id: string }>(
const typedDb = db as DatabaseAdapter;
const schemaRow = await typedDb.queryOne<{ jira_schema_id: string }>(
`SELECT jira_schema_id FROM schemas ORDER BY jira_schema_id LIMIT 1`
);
defaultSchemaId = schemaRow?.jira_schema_id || null;
@@ -283,7 +289,7 @@ class SchemaMappingService {
logger.warn('SchemaMapping: Failed to get default schema ID from database', error);
}
return rows.map((row: { type_name: string; display_name: string; description: string | null; schema_id: string; enabled: boolean | number; created_at: string; updated_at: string }) => ({
return rows.map((row: { type_name: string; display_name: string; description: string | null; object_count: number; sync_priority: number; schema_id: string | null; enabled: number | boolean | null }) => ({
typeName: row.type_name,
displayName: row.display_name,
description: row.description,
@@ -291,8 +297,8 @@ class SchemaMappingService {
enabled: row.enabled === null
? true // Default: enabled if no mapping exists
: (typeof row.enabled === 'boolean' ? row.enabled : row.enabled === 1),
objectCount: (row as any).object_count || 0,
syncPriority: (row as any).sync_priority || 0,
objectCount: row.object_count || 0,
syncPriority: row.sync_priority || 0,
}));
} catch (error) {
logger.error('SchemaMappingService: Failed to get object types with config', error);
@@ -312,7 +318,8 @@ class SchemaMappingService {
await db.ensureInitialized?.();
// Check if mapping exists
const existing = await db.queryOne<{ schema_id: string }>(`
const typedDb = db as DatabaseAdapter;
const existing = await typedDb.queryOne<{ schema_id: string }>(`
SELECT schema_id FROM schema_mappings WHERE object_type_name = ?
`, [objectTypeName]);