import {ConfigurationProvider} from "../ConfigurationProvider"; import {ServerConfigurationModel} from "../../Database/Models/ServerConfigurationModel"; import {ServerConfigurationRepository} from "../../Database/Repositories/ServerConfigurationRepository"; import {Snowflake} from "discord.js"; import { ConfigurationModel } from "../../Database/Models/ConfigurationModel"; import { Model } from "../../Database/Models/Model"; import { Nullable } from "../../types/Nullable"; import {ConfigurationTransformer, TransformerType} from "../ConfigurationTransformer"; export type RuntimeServerConfiguration = { permissions: PermissionRuntimeServerConfiguration } export type PermissionRuntimeServerConfiguration = { groupCreation: GroupCreatePermissionRuntimeServerConfiguration } export type GroupCreatePermissionRuntimeServerConfiguration = { allowEveryone: boolean } export class ServerConfigurationProvider implements ConfigurationProvider< ServerConfigurationModel, RuntimeServerConfiguration > { constructor( private readonly repository: ServerConfigurationRepository, private readonly serverid: Snowflake ) { } get defaults(): RuntimeServerConfiguration { return { permissions: { groupCreation: { allowEveryone: false } } } } get(path: string): Nullable { return this.repository.findConfigurationByPath(this.serverid, path); } getAll(): ServerConfigurationModel[] { return this.repository.findServerConfigurations(this.serverid); } save(value: Omit & Partial): void { if (value.id) { // @ts-expect-error id is set, due to the check on line above this.repository.update(value); return } this.repository.create({ ...value, serverid: this.serverid }); } getTransformer(): ConfigurationTransformer { return new ConfigurationTransformer( [ { path: ['permissions', 'groupCreation', 'allowEveryone'], type: TransformerType.PermissionBoolean } ] ) } }