import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { readFile } from 'node:fs/promises'; import { SystemMetadata, SystemMetadataEntity } from 'src/entities/system-metadata.entity'; import { ISystemMetadataRepository } from 'src/interfaces/system-metadata.interface'; import { Instrumentation } from 'src/utils/instrumentation'; import { Repository } from 'typeorm'; @Instrumentation() @Injectable() export class SystemMetadataRepository implements ISystemMetadataRepository { constructor( @InjectRepository(SystemMetadataEntity) private repository: Repository, ) {} async get(key: T): Promise { const metadata = await this.repository.findOne({ where: { key } }); if (!metadata) { return null; } return metadata.value as SystemMetadata[T]; } async set(key: T, value: SystemMetadata[T]): Promise { await this.repository.upsert({ key, value }, { conflictPaths: { key: true } }); } async delete(key: T): Promise { await this.repository.delete({ key }); } readFile(filename: string): Promise { return readFile(filename, { encoding: 'utf8' }); } }