Files
the-jailor/wwwroot/core/utils/jsonManager.js
2025-11-09 10:23:23 +01:00

85 lines
2.2 KiB
JavaScript

import path from 'path';
import {readFileSync, writeFileSync} from 'fs';
import {Logger} from '../logging/logger.js';
export default class JsonManager {
/**
* Read the current data in a file
* @param {*} filePath
* @returns deserialized content
*/
static read(filePath) {
try {
const fullPath = path.resolve(filePath);
const jsonString = readFileSync(fullPath, 'utf8');
return JSON.parse(jsonString);
} catch (err) {
Logger.error('Error reading JSON file: ', err.message);
return null;
}
}
/**
* Write the given data in a file by overriding the previous data
* @param {*} filePath
* @param {*} data
* @returns
*/
static writeUnsafe(filePath, data) {
try {
const fullPath = path.resolve(filePath);
const jsonString = JSON.stringify(data);
writeFileSync(fullPath, jsonString, 'utf8', async err => {
if(err) await Logger.error(err.message);
});
} catch (err) {
Logger.error('Error writting in JSON file: ', err.message);
return null;
}
}
static upsertToken(filePath, userData) {
const existingData = JsonManager.read(filePath);
const index = existingData.findIndex(e => e.userId === userData.userId);
if (index !== -1) {
existingData.splice(index, 1, userData);
} else {
existingData.push(userData);
}
JsonManager.writeUnsafe(filePath, existingData);
return existingData;
}
static upsertPost(filePath, { userId, permalink }) {
const data = JsonManager.read(filePath);
let modified = false;
const index = data.findIndex(e => e.userId === userId);
if (index !== -1) {
if (data[index].permalink !== permalink) {
data[index].permalink = permalink;
modified = true;
}
} else {
data.push({ userId, permalink });
modified = true;
}
if (modified) {
JsonManager.writeUnsafe(filePath, data);
}
return modified;
}
}