import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { readFile } from 'node:fs/promises'; import { Chunked, DummyValue, GenerateSql } from 'src/decorators'; import { SystemConfigEntity } from 'src/entities/system-config.entity'; import { ISystemConfigRepository } from 'src/interfaces/system-config.interface'; import { Instrumentation } from 'src/utils/instrumentation'; import { In, Repository } from 'typeorm'; @Instrumentation() @Injectable() export class SystemConfigRepository implements ISystemConfigRepository { constructor( @InjectRepository(SystemConfigEntity) private repository: Repository, ) {} async fetchStyle(url: string) { try { const response = await fetch(url); if (!response.ok) { throw new Error(`Failed to fetch data from ${url} with status ${response.status}: ${await response.text()}`); } return response.json(); } catch (error) { throw new Error(`Failed to fetch data from ${url}: ${error}`); } } @GenerateSql() load(): Promise { return this.repository.find(); } readFile(filename: string): Promise { return readFile(filename, { encoding: 'utf8' }); } saveAll(items: SystemConfigEntity[]): Promise { return this.repository.save(items); } @GenerateSql({ params: [DummyValue.STRING] }) @Chunked() async deleteKeys(keys: string[]): Promise { await this.repository.delete({ key: In(keys) }); } }