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

@ -4,6 +4,7 @@ import { Repository } from "typeorm";
import { Project } from "./entities/project.entity";
import { RedisClient } from "src/redis/redis.service";
import { DatabaseManagerService } from "src/databaseManager/database/database.manager.service";
import { ProjectSettingService } from "./settings/project.setting.service";
@Injectable()
export class ProjectService {
@ -13,9 +14,23 @@ export class ProjectService {
@Inject(RedisClient)
private readonly redisClient: RedisClient,
@Inject(forwardRef(() => DatabaseManagerService))
private readonly databaseManagerService: DatabaseManagerService
private readonly databaseManagerService: DatabaseManagerService,
@Inject(ProjectSettingService)
private readonly projectSettingService: ProjectSettingService
) {}
async createDefaultSettings(projectId: string) {
const defaultSettings = [{ key: "sessionTTL", value: "3600" }];
await Promise.all(
defaultSettings.map((setting) =>
this.projectSettingService.create(projectId, setting.key, setting.value)
)
);
return true;
}
async create(name: string, createDatabase: boolean = true) {
const project = this.projectRepository.create({ name });
const projectSaved = await this.projectRepository.save(project);
@ -24,6 +39,9 @@ export class ProjectService {
await this.databaseManagerService.createDatabase(projectSaved.id);
}
await this.createDefaultSettings(projectSaved.id);
await this.redisClient.set(`project_${projectSaved.id}`, projectSaved, 300);
return projectSaved;
}