Browse Source

fix: resolve TypeScript errors in database service implementation

- Remove unnecessary generic type parameter from AbsurdSqlDatabaseService
- Fix type handling in operation queue and result processing
- Correct WebPlatformService dbGetOneRow implementation to use imported databaseService
- Add proper type annotations for database operation results

This commit improves type safety and fixes several TypeScript errors that were
preventing proper type checking in the database service layer.
pull/137/head
Matthew Raymer 2 weeks ago
parent
commit
f2c49872a6
  1. 28
      src/services/AbsurdSqlDatabaseService.ts
  2. 4
      src/services/platforms/WebPlatformService.ts

28
src/services/AbsurdSqlDatabaseService.ts

@ -6,11 +6,11 @@ import { runMigrations } from "../db-sql/migration";
import type { DatabaseService, QueryExecResult } from "../interfaces/database"; import type { DatabaseService, QueryExecResult } from "../interfaces/database";
import { logger } from "@/utils/logger"; import { logger } from "@/utils/logger";
interface QueuedOperation<T = unknown> { interface QueuedOperation {
type: "run" | "query" | "getOneRow" | "getAll"; type: "run" | "query" | "getOneRow" | "getAll";
sql: string; sql: string;
params: unknown[]; params: unknown[];
resolve: (value: T) => void; resolve: (value: unknown) => void;
reject: (reason: unknown) => void; reject: (reason: unknown) => void;
} }
@ -22,12 +22,12 @@ interface AbsurdSqlDatabase {
) => Promise<{ changes: number; lastId?: number }>; ) => Promise<{ changes: number; lastId?: number }>;
} }
class AbsurdSqlDatabaseService<T> implements DatabaseService { class AbsurdSqlDatabaseService implements DatabaseService {
private static instance: AbsurdSqlDatabaseService | null = null; private static instance: AbsurdSqlDatabaseService | null = null;
private db: AbsurdSqlDatabase | null; private db: AbsurdSqlDatabase | null;
private initialized: boolean; private initialized: boolean;
private initializationPromise: Promise<void> | null = null; private initializationPromise: Promise<void> | null = null;
private operationQueue: Array<QueuedOperation<T>> = []; private operationQueue: Array<QueuedOperation> = [];
private isProcessingQueue: boolean = false; private isProcessingQueue: boolean = false;
private constructor() { private constructor() {
@ -123,9 +123,7 @@ class AbsurdSqlDatabaseService<T> implements DatabaseService {
if (!operation) continue; if (!operation) continue;
try { try {
let result; let result: unknown;
let queryResult;
let allResult;
switch (operation.type) { switch (operation.type) {
case "run": case "run":
result = await this.db.run(operation.sql, operation.params); result = await this.db.run(operation.sql, operation.params);
@ -134,11 +132,11 @@ class AbsurdSqlDatabaseService<T> implements DatabaseService {
result = await this.db.exec(operation.sql, operation.params); result = await this.db.exec(operation.sql, operation.params);
break; break;
case "getOneRow": case "getOneRow":
queryResult = await this.db.exec(operation.sql, operation.params); const queryResult = await this.db.exec(operation.sql, operation.params);
result = queryResult[0]?.values[0]; result = queryResult[0]?.values[0];
break; break;
case "getAll": case "getAll":
allResult = await this.db.exec(operation.sql, operation.params); const allResult = await this.db.exec(operation.sql, operation.params);
result = allResult[0]?.values || []; result = allResult[0]?.values || [];
break; break;
} }
@ -151,17 +149,17 @@ class AbsurdSqlDatabaseService<T> implements DatabaseService {
this.isProcessingQueue = false; this.isProcessingQueue = false;
} }
private async queueOperation<T>( private async queueOperation<R>(
type: QueuedOperation<T>["type"], type: QueuedOperation["type"],
sql: string, sql: string,
params: unknown[] = [], params: unknown[] = [],
): Promise<T> { ): Promise<R> {
return new Promise<T>((resolve, reject) => { return new Promise<R>((resolve, reject) => {
const operation: QueuedOperation<T> = { const operation: QueuedOperation = {
type, type,
sql, sql,
params, params,
resolve, resolve: (value: unknown) => resolve(value as R),
reject, reject,
}; };
this.operationQueue.push(operation); this.operationQueue.push(operation);

4
src/services/platforms/WebPlatformService.ts

@ -381,4 +381,8 @@ export class WebPlatformService implements PlatformService {
): Promise<{ changes: number; lastId?: number }> { ): Promise<{ changes: number; lastId?: number }> {
return databaseService.run(sql, params); return databaseService.run(sql, params);
} }
async dbGetOneRow(sql: string, params?: unknown[]): Promise<unknown[] | undefined> {
return databaseService.query(sql, params).then((result: QueryExecResult[]) => result[0]?.values[0]);
}
} }

Loading…
Cancel
Save