import {Repository} from "./Repository"; import GroupConfiguration, {DBGroupConfiguration} from "../Database/tables/GroupConfiguration"; import {GroupConfigurationModel} from "../Models/GroupConfigurationModel"; import {GroupModel} from "../Models/GroupModel"; import {Nullable} from "../types/Nullable"; import {DatabaseConnection} from "../Database/DatabaseConnection"; import {GroupRepository} from "./GroupRepository"; export class GroupConfigurationRepository extends Repository { constructor( protected readonly database: DatabaseConnection, private readonly groupRepository: GroupRepository, ) { super( database, GroupConfiguration ); } public findGroupConfigurations(group: GroupModel): GroupConfigurationModel[] { return this.database.fetchAll(` SELECT * FROM groupConfiguration WHERE groupid = ?`, group.id ).map((config) => { return this.convertToModelType(config, group); }) } public findConfigurationByPath(group: GroupModel, path: string): Nullable { const result = this.database.fetch(` SELECT * FROM groupConfiguration WHERE groupid = ? AND key = ?`, group.id, path ); if (!result) { return null; } return this.convertToModelType(result, group); } protected convertToModelType(intermediateModel: DBGroupConfiguration | undefined, group: Nullable = null): GroupConfigurationModel { if (!intermediateModel) { throw new Error("No intermediate model provided"); } return { id: intermediateModel.id, group: group ?? this.groupRepository.getById(intermediateModel.id), key: intermediateModel.key, value: intermediateModel.value, } } protected convertToCreateObject(instance: Partial): object { return { groupid: instance.group?.id ?? undefined, key: instance.key ?? undefined, value: instance.value ?? undefined, } } }