import {Repository} from "./Repository"; import {Nullable} from "../../types/Nullable"; import {DatabaseConnection} from "../DatabaseConnection"; import {ServerConfigurationModel} from "../Models/ServerConfigurationModel"; import ServerConfiguration, {DBServerConfiguration} from "../tables/ServerConfiguration"; import {Snowflake} from "discord.js"; export class ServerConfigurationRepository extends Repository { constructor( protected readonly database: DatabaseConnection, ) { super( database, ServerConfiguration ); } public findServerConfigurations(server: Snowflake): ServerConfigurationModel[] { return this.database.fetchAll( `SELECT * FROM serverConfiguration WHERE serverid = ?`, server ).map((config) => { return this.convertToModelType(config); }) } public findConfigurationByPath(server: Snowflake, path: string): Nullable { const result = this.database.fetch( `SELECT * FROM serverConfiguration WHERE serverid = ? AND key = ?`, server, path ); if (!result) { return null; } return this.convertToModelType(result); } protected convertToModelType(intermediateModel: DBServerConfiguration | undefined): ServerConfigurationModel { if (!intermediateModel) { throw new Error("No intermediate model provided"); } return { id: intermediateModel.id, serverid: intermediateModel.serverid, key: intermediateModel.key, value: intermediateModel.value, } } protected convertToCreateObject(instance: Partial): object { return { serverid: instance.serverid ?? undefined, key: instance.key ?? undefined, value: instance.value ?? undefined, } } }