Files
swiss-datashare/backend/src/config/config.service.ts

90 lines
2.4 KiB
TypeScript
Raw Normal View History

import {
BadRequestException,
Inject,
Injectable,
NotFoundException,
} from "@nestjs/common";
import { Config } from "@prisma/client";
import { PrismaService } from "src/prisma/prisma.service";
@Injectable()
export class ConfigService {
constructor(
@Inject("CONFIG_VARIABLES") private configVariables: Config[],
private prisma: PrismaService
) {}
get(key: string): any {
const configVariable = this.configVariables.filter(
(variable) => variable.key == key
)[0];
if (!configVariable) throw new Error(`Config variable ${key} not found`);
2022-12-01 23:07:49 +01:00
if (configVariable.type == "number") return parseInt(configVariable.value);
if (configVariable.type == "boolean") return configVariable.value == "true";
2022-12-15 21:44:04 +01:00
if (configVariable.type == "string" || configVariable.type == "text")
return configVariable.value;
}
async listForAdmin() {
2022-12-01 23:07:49 +01:00
return await this.prisma.config.findMany({
2023-01-26 14:06:25 +01:00
orderBy: { order: "asc" },
2022-12-01 23:07:49 +01:00
where: { locked: { equals: false } },
});
}
async list() {
2022-12-01 23:07:49 +01:00
return await this.prisma.config.findMany({
where: { secret: { equals: false } },
});
}
async updateMany(data: { key: string; value: string | number | boolean }[]) {
for (const variable of data) {
await this.update(variable.key, variable.value);
}
return data;
}
async update(key: string, value: string | number | boolean) {
const configVariable = await this.prisma.config.findUnique({
where: { key },
});
if (!configVariable || configVariable.locked)
throw new NotFoundException("Config variable not found");
2022-12-15 21:44:04 +01:00
if (
typeof value != configVariable.type &&
typeof value == "string" &&
configVariable.type != "text"
) {
throw new BadRequestException(
`Config variable must be of type ${configVariable.type}`
);
2022-12-15 21:44:04 +01:00
}
2022-12-01 23:07:49 +01:00
const updatedVariable = await this.prisma.config.update({
where: { key },
data: { value: value.toString() },
});
2022-12-01 23:07:49 +01:00
this.configVariables = await this.prisma.config.findMany();
return updatedVariable;
}
async changeSetupStatus(status: "STARTED" | "REGISTERED" | "FINISHED") {
2023-02-03 11:01:10 +01:00
const updatedVariable = await this.prisma.config.update({
where: { key: "SETUP_STATUS" },
data: { value: status },
2022-12-01 23:07:49 +01:00
});
2023-02-03 11:01:10 +01:00
this.configVariables = await this.prisma.config.findMany();
return updatedVariable;
}
}