85 lines
2.2 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
|