2025-02-16 22:47:47 -05:00
|
|
|
// lib/db/db-service.ts
|
|
|
|
import { SQLiteDatabase } from 'expo-sqlite';
|
2025-04-04 15:46:31 -04:00
|
|
|
import { createLogger } from '@/lib/utils/logger';
|
|
|
|
|
|
|
|
// Create database-specific logger
|
|
|
|
const logger = createLogger('SQLite');
|
2025-02-16 22:47:47 -05:00
|
|
|
|
|
|
|
export class DbService {
|
|
|
|
private db: SQLiteDatabase;
|
|
|
|
|
|
|
|
constructor(db: SQLiteDatabase) {
|
|
|
|
this.db = db;
|
|
|
|
}
|
|
|
|
|
|
|
|
async execAsync(sql: string): Promise<void> {
|
|
|
|
try {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.debug('Executing SQL:', sql);
|
2025-02-16 22:47:47 -05:00
|
|
|
await this.db.execAsync(sql);
|
|
|
|
} catch (error) {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.error('SQL Error:', error);
|
2025-02-16 22:47:47 -05:00
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async runAsync(sql: string, params: any[] = []) {
|
|
|
|
try {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.debug('Running SQL:', sql);
|
|
|
|
logger.debug('Parameters:', params);
|
2025-02-16 22:47:47 -05:00
|
|
|
return await this.db.runAsync(sql, params);
|
|
|
|
} catch (error) {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.error('SQL Error:', error);
|
2025-02-16 22:47:47 -05:00
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async getFirstAsync<T>(sql: string, params: any[] = []): Promise<T | null> {
|
|
|
|
try {
|
|
|
|
return await this.db.getFirstAsync<T>(sql, params);
|
|
|
|
} catch (error) {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.error('SQL Error:', error);
|
2025-02-16 22:47:47 -05:00
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async getAllAsync<T>(sql: string, params: any[] = []): Promise<T[]> {
|
|
|
|
try {
|
|
|
|
return await this.db.getAllAsync<T>(sql, params);
|
|
|
|
} catch (error) {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.error('SQL Error:', error);
|
2025-02-16 22:47:47 -05:00
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async withTransactionAsync(action: () => Promise<void>): Promise<void> {
|
|
|
|
try {
|
|
|
|
await this.db.withTransactionAsync(async () => {
|
|
|
|
await action();
|
|
|
|
});
|
|
|
|
} catch (error) {
|
2025-04-04 15:46:31 -04:00
|
|
|
logger.error('Transaction Error:', error);
|
2025-02-16 22:47:47 -05:00
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
2025-04-04 15:46:31 -04:00
|
|
|
}
|