import { QueryResult } from '../types/sqlite.type'; import { BaseDAO } from './BaseDAO'; export abstract class ComposedDAO extends BaseDAO { 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 = await this.sqlite.executeQuery(this.JOIN_SQL); return result.rows.map(this.fromDB); } override async findBy(values: Partial): Promise { let sql = this.JOIN_SQL.slice(0, -1) + ' '; const params: any[] = []; const whereSql = this.whereClauseGenerator(values, params, this.tableAlias); sql += whereSql + ';'; const result: QueryResult = await this.sqlite.executeQuery(sql, params); return result.rows.map(this.fromDB); } }