Files
groceries-price-tracker/src/app/dao/ComposedDAO.ts

28 lines
963 B
TypeScript

import { QueryResult } from '../types/sqlite.type';
import { BaseDAO } from './BaseDAO';
export abstract class ComposedDAO<T extends Object, K extends Object, U> extends BaseDAO<T, K, U> {
protected readonly JOIN_SQL: string;
protected readonly tableAlias: string;
constructor(tableName: string, joinSql: string, tableAlias: string) {
super(tableName);
this.JOIN_SQL = joinSql;
this.tableAlias = tableAlias;
}
override async findAll() {
const result: QueryResult<U> = await this.sqlite.executeQuery(this.JOIN_SQL);
return result.rows.map(this.fromDB);
}
override async findBy(values: Partial<K>): Promise<T[]> {
let sql = this.JOIN_SQL.slice(0, -1) + ' ';
const params: any[] = [];
const whereSql = this.whereClauseGenerator(values, params, this.tableAlias);
sql += whereSql + ';';
const result: QueryResult<U> = await this.sqlite.executeQuery(sql, params);
return result.rows.map(this.fromDB);
}
}