28 lines
963 B
TypeScript
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);
|
|
}
|
|
}
|