/*
* Copyright (C) 2026 Fluxer Contributors
*
* This file is part of Fluxer.
*
* Fluxer is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fluxer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Fluxer. If not, see .
*/
import {fetchMany, fetchOne, upsertOne} from '~/database/Cassandra';
import type {InstanceConfigurationRow} from '~/database/CassandraTypes';
import {InstanceConfiguration} from '~/Tables';
const FETCH_CONFIG_QUERY = InstanceConfiguration.selectCql({
where: InstanceConfiguration.where.eq('key'),
limit: 1,
});
const FETCH_ALL_CONFIG_QUERY = InstanceConfiguration.selectCql();
export interface InstanceConfig {
manualReviewEnabled: boolean;
manualReviewScheduleEnabled: boolean;
manualReviewScheduleStartHourUtc: number;
manualReviewScheduleEndHourUtc: number;
registrationAlertsWebhookUrl: string | null;
systemAlertsWebhookUrl: string | null;
}
export class InstanceConfigRepository {
async getConfig(key: string): Promise {
const row = await fetchOne(FETCH_CONFIG_QUERY, {key});
return row?.value ?? null;
}
async getAllConfigs(): Promise