crystelf-core/src/utils/redis/persistence.ts
2025-04-29 18:43:23 +08:00

67 lines
1.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import path from 'path';
import paths from '../core/path';
import fc from '../core/file';
import logger from '../core/logger';
import fs from 'fs/promises';
class Persistence {
private static getDataPath(dataName: string, fileName: string): string {
return path.join(paths.get('userData'), dataName, `${fileName}.json`);
}
/**
* 确保数据目录存在
* @param dataName
* @private
*/
private static async ensureDataPath(dataName: string): Promise<void> {
const dataPath = path.join(paths.get('userData'), dataName);
try {
await fc.createDir(dataPath, false);
} catch (err) {
logger.error(err);
}
}
/**
* 将数据写入本地以json格式存储
* @param dataName 目录名
* @param data 文件内容
* @param fileName 文件名
*/
public static async writeDataLocal<T>(
dataName: string,
data: T,
fileName: string
): Promise<void> {
await this.ensureDataPath(dataName);
const filePath = this.getDataPath(dataName, fileName);
try {
await fs.writeFile(filePath, JSON.stringify(data, null, 2), 'utf-8');
logger.debug(`用户数据已持久化到本地${filePath}`);
} catch (err) {
logger.error(err);
}
}
/**
* 从本地读取文件
* @param dataName 目录名
* @param fileName 文件名
*/
public static async readDataLocal<T>(dataName: string, fileName: string): Promise<T | undefined> {
const filePath = this.getDataPath(dataName, fileName);
try {
const data = await fs.readFile(filePath, 'utf-8');
return JSON.parse(data) as T;
} catch (err) {
logger.error(err);
return undefined;
}
}
}
export default Persistence;