feat: implement project settings management with CRUD operations and caching

This commit is contained in:
lborv
2025-10-13 20:40:01 +03:00
parent aa7920384c
commit 93f12cd1d8
14 changed files with 304 additions and 17 deletions

View File

@ -0,0 +1,29 @@
import { Query } from "src/query/entities/query.entity";
import { Plugin } from "../plugin.class";
import { QueryExecuterService } from "src/query/executer/query.executer.service";
export class SettingsPlugin extends Plugin {
constructor(
name: string,
private query: Query,
private queryExecuterService: QueryExecuterService
) {
super(name, ["get"]);
}
static async init(query: Query, queryExecuterService: QueryExecuterService) {
return new SettingsPlugin("settings", query, queryExecuterService);
}
async get(property: string): Promise<any> {
const settings =
await this.queryExecuterService.projectSettingService.getAll(
this.query.project.id
);
return settings[property];
}
onFinish() {
// No resources to clean up
}
}

View File

@ -6,6 +6,7 @@ import { AxiosPlugin } from "./plugins/axios.plugin";
import { RedisPlugin } from "./plugins/redis.plugin";
import { SessionPlugin } from "./plugins/session.plugin";
import { TLog } from "src/query/logger/logger.types";
import { SettingsPlugin } from "./plugins/settings.plugin";
export const registeredPlugins = {
db: async (service: QueryExecuterService, query: Query) => {
@ -32,6 +33,9 @@ export const registeredPlugins = {
return RedisPlugin.init("redis", redisConnection, query.project.id);
},
settings: async (service: QueryExecuterService, query: Query) => {
return SettingsPlugin.init(query, service);
},
session: async (
service: QueryExecuterService,
query: Query,