Making Fredy an ESM project (#70)

Making Fredy an ESM project
This commit is contained in:
Christian Kellner
2023-03-13 13:42:43 +01:00
committed by GitHub
parent 7d0ec72a0c
commit 2c5eceb0c1
69 changed files with 862 additions and 1567 deletions

View File

@@ -0,0 +1,8 @@
import lodash from 'lodash';
import { LowSync } from 'lowdb';
export default class LowdashAdapter extends LowSync {
constructor(adapter) {
super(adapter);
this.chain = lodash.chain(this).get('data');
}
}

View File

@@ -1,28 +1,30 @@
const path = require('path');
const DB_PATH = path.dirname(require.main.filename) + '/db/jobs.json';
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync(DB_PATH);
const low = require('lowdb');
const db = low(adapter);
const { nanoid } = require('nanoid');
const listingStorage = require('./listingsStorage');
import { JSONFileSync } from 'lowdb/node';
import { nanoid } from 'nanoid';
import * as listingStorage from './listingsStorage.js';
import { getDirName } from '../../utils.js';
import path from 'path';
import LowdashAdapter from './LowDashAdapter.js';
db.defaults({ jobs: [] }).write();
const file = path.join(getDirName(), '../', 'db/jobs.json');
const adapter = new JSONFileSync(file);
const db = new LowdashAdapter(adapter);
exports.upsertJob = ({ jobId, name, blacklist = [], enabled = true, provider, notificationAdapter, userId }) => {
db.read();
db.data ||= { jobs: [] };
export const upsertJob = ({ jobId, name, blacklist = [], enabled = true, provider, notificationAdapter, userId }) => {
const currentJob =
jobId == null
? null
: db
: db.chain
.get('jobs')
.find((job) => job.id === jobId)
.value();
const jobs = db
const jobs = db.chain
.get('jobs')
.value()
.filter((job) => job.id !== jobId);
.filter((job) => job.id !== jobId)
.value();
jobs.push({
id: jobId || nanoid(),
//make sure to not overwrite the user id in case an admin changes the job
@@ -33,57 +35,55 @@ exports.upsertJob = ({ jobId, name, blacklist = [], enabled = true, provider, no
provider,
notificationAdapter,
});
db.set('jobs', jobs).write();
db.chain.set('jobs', jobs).value();
db.write();
};
exports.getJob = (jobId) => {
const job = db
export const getJob = (jobId) => {
const job = db.chain
.get('jobs')
.find((job) => job.id === jobId)
.value();
if (job == null) {
return null;
}
return {
...job,
numberOfFoundListings: listingStorage.getNumberOfAllKnownListings(job.id).length,
};
};
exports.setJobStatus = ({ jobId, status }) => {
db.get('jobs')
export const setJobStatus = ({ jobId, status }) => {
db.chain
.get('jobs')
.find((job) => job.id === jobId)
.assign({ enabled: status })
.write();
.value();
db.write();
};
exports.removeJob = (jobId) => {
export const removeJob = (jobId) => {
listingStorage.removeListings(jobId);
db.get('jobs')
db.chain
.get('jobs')
.remove((job) => job.id === jobId)
.write();
.value();
db.write();
};
exports.removeJobsByUserId = (userId) => {
db.get('jobs')
.value()
export const removeJobsByUserId = (userId) => {
db.chain
.get('jobs')
.filter((job) => job.userId === userId)
.forEach((job) => listingStorage.removeListings(job.id));
db.get('jobs')
.remove((job) => job.userId === userId)
.write();
};
exports.getJobs = () => {
return db
db.chain
.get('jobs')
.remove((job) => job.userId === userId)
.value();
db.write();
};
export const getJobs = () => {
return db.chain
.get('jobs')
.value()
.map((job) => ({
...job,
numberOfFoundListings: listingStorage.getNumberOfAllKnownListings(job.id),
}));
}))
.value();
};

View File

@@ -1,10 +1,15 @@
const path = require('path');
import { JSONFileSync } from 'lowdb/node';
import { getDirName } from '../../utils.js';
import path from 'path';
import LowdashAdapter from './LowDashAdapter.js';
const DB_PATH = path.dirname(require.main.filename) + '/db/jobListingData.json';
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync(DB_PATH);
const low = require('lowdb');
const db = low(adapter);
const file = path.join(getDirName(), '../', 'db/jobListingData.json');
const adapter = new JSONFileSync(file);
const db = new LowdashAdapter(adapter);
db.read();
db.data ||= {};
const buildKey = (jobKey, providerId, endpoint) => {
let key = `${jobKey}`;
@@ -19,35 +24,31 @@ const buildKey = (jobKey, providerId, endpoint) => {
}
return key;
};
exports.getNumberOfAllKnownListings = (jobId) => {
const data = db.get(`${jobId}.providerData`).value() || {};
export const getNumberOfAllKnownListings = (jobId) => {
const data = db.chain.get(`${jobId}.providerData`).value() || {};
return Object.values(data)
.map((values) => Object.keys(values).length)
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
};
exports.getListingProviderDataForAnalytics = (jobId) => {
export const getListingProviderDataForAnalytics = (jobId) => {
const key = buildKey(jobId, 'providerData');
return db.get(key).value() || {};
return db.chain.get(key).value() || {};
};
exports.getKnownListings = (jobId, providerId) => {
export const getKnownListings = (jobId, providerId) => {
const providerListingsKey = buildKey(jobId, 'providerData', providerId, 'listings');
return db.get(providerListingsKey).value() || {};
return db.chain.get(providerListingsKey).value() || {};
};
exports.setKnownListings = (jobId, providerId, listings) => {
export const setKnownListings = (jobId, providerId, listings) => {
const providerListingsKey = buildKey(jobId, 'providerData', providerId, 'listings');
return db.set(providerListingsKey, listings).write();
db.chain.set(providerListingsKey, listings).value();
return db.write();
};
exports.setLastJobExecution = (jobId) => {
export const setLastJobExecution = (jobId) => {
const key = buildKey(jobId, null, 'lastExecution');
return db.set(key, Date.now()).write();
db.chain.set(key, Date.now()).value();
return db.write();
};
exports.removeListings = (jobId) => {
db.unset(jobId).write();
export const removeListings = (jobId) => {
db.chain.unset(jobId).value();
db.write();
};

View File

@@ -1,14 +1,17 @@
const path = require('path');
const DB_PATH = path.dirname(require.main.filename) + '/db/users.json';
const FileSync = require('lowdb/adapters/FileSync');
const adapter = new FileSync(DB_PATH);
const low = require('lowdb');
const db = low(adapter);
const hasher = require('../security/hash');
const { nanoid } = require('nanoid');
const jobStorage = require('./jobStorage');
import { JSONFileSync } from 'lowdb/node';
import { getDirName } from '../../utils.js';
import * as hasher from '../security/hash.js';
import { nanoid } from 'nanoid';
import * as jobStorage from './jobStorage.js';
import path from 'path';
import LowdashAdapter from './LowDashAdapter.js';
db.defaults({
const file = path.join(getDirName(), '../', 'db/users.json');
const adapter = new JSONFileSync(file);
const db = new LowdashAdapter(adapter);
db.read();
db.data ||= {
user: [
//you probably want to change the default password ;)
{
@@ -20,11 +23,11 @@ db.defaults({
isDemo: false,
},
],
}).write();
};
exports.getUsers = (withPassword) => {
export const getUsers = (withPassword) => {
const jobs = jobStorage.getJobs();
return db
return db.chain
.get('user')
.value()
.map((user) => ({
@@ -34,13 +37,12 @@ exports.getUsers = (withPassword) => {
numberOfJobs: jobs.filter((job) => job.userId === user.id).length,
}));
};
exports.getUser = (id) => {
export const getUser = (id) => {
const jobs = jobStorage.getJobs();
const user = db
const user = db.chain
.get('user')
.value()
.find((user) => user.id === id);
.find((user) => user.id === id)
.value();
if (user == null) {
return null;
}
@@ -49,13 +51,11 @@ exports.getUser = (id) => {
numberOfJobs: jobs.filter((job) => job.userId === user.id).length,
};
};
exports.upsertUser = ({ username, password, userId, isAdmin }) => {
const user = db
export const upsertUser = ({ username, password, userId, isAdmin }) => {
const user = db.chain
.get('user')
.value()
.filter((u) => u.id !== userId);
.filter((u) => u.id !== userId)
.value();
user.push({
id: userId || nanoid(),
username,
@@ -63,21 +63,24 @@ exports.upsertUser = ({ username, password, userId, isAdmin }) => {
password: hasher.hash(password),
isAdmin,
});
db.set('user', user).write();
db.chain.set('user', user).value();
db.write();
};
exports.setLastLoginToNow = ({ userId }) => {
db.get('user')
export const setLastLoginToNow = ({ userId }) => {
db.chain
.get('user')
.find((u) => u.id === userId)
.assign({ lastLogin: Date.now() })
.write();
.value();
db.write();
};
exports.removeUser = (userId) => {
const user = db.get('user').value();
db.set(
'user',
user.filter((u) => u.id !== userId)
).write();
export const removeUser = (userId) => {
const user = db.chain.get('user').value();
db.chain
.set(
'user',
user.filter((u) => u.id !== userId)
)
.value();
db.write();
};