mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
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';
|
|
|
|
const file = path.join(getDirName(), '../', 'db/jobs.json');
|
|
const adapter = new JSONFileSync(file);
|
|
const db = new LowdashAdapter(adapter, { jobs: [] });
|
|
|
|
db.read();
|
|
|
|
export const upsertJob = ({ jobId, name, blacklist = [], enabled = true, provider, notificationAdapter, userId }) => {
|
|
const currentJob =
|
|
jobId == null
|
|
? null
|
|
: db.chain
|
|
.get('jobs')
|
|
.find((job) => job.id === jobId)
|
|
.value();
|
|
const jobs = db.chain
|
|
.get('jobs')
|
|
.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
|
|
userId: currentJob == null ? userId : currentJob.userId,
|
|
enabled,
|
|
name,
|
|
blacklist,
|
|
provider,
|
|
notificationAdapter,
|
|
});
|
|
db.chain.set('jobs', jobs).value();
|
|
db.write();
|
|
};
|
|
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,
|
|
};
|
|
};
|
|
export const setJobStatus = ({ jobId, status }) => {
|
|
db.chain
|
|
.get('jobs')
|
|
.find((job) => job.id === jobId)
|
|
.assign({ enabled: status })
|
|
.value();
|
|
db.write();
|
|
};
|
|
export const removeJob = (jobId) => {
|
|
listingStorage.removeListings(jobId);
|
|
db.chain
|
|
.get('jobs')
|
|
.remove((job) => job.id === jobId)
|
|
.value();
|
|
db.write();
|
|
};
|
|
export const removeJobsByUserId = (userId) => {
|
|
db.chain
|
|
.get('jobs')
|
|
.filter((job) => job.userId === userId)
|
|
.forEach((job) => listingStorage.removeListings(job.id));
|
|
db.chain
|
|
.get('jobs')
|
|
.remove((job) => job.userId === userId)
|
|
.value();
|
|
db.write();
|
|
};
|
|
export const removeJobsByUserName = (userId) => {
|
|
let removedDemoJobs = 0;
|
|
db.chain
|
|
.get('jobs')
|
|
.filter((job) => job.userId === userId)
|
|
.forEach((job) => {
|
|
removedDemoJobs++;
|
|
listingStorage.removeListings(job.id);
|
|
});
|
|
db.chain
|
|
.get('jobs')
|
|
.remove((job) => job.userId === userId)
|
|
.value();
|
|
db.write();
|
|
if (removedDemoJobs > 0) {
|
|
/* eslint-disable no-console */
|
|
console.log(`Removed ${removedDemoJobs} demo jobs`);
|
|
/* eslint-enable no-console */
|
|
}
|
|
};
|
|
export const getJobs = () => {
|
|
return db.chain
|
|
.get('jobs')
|
|
.map((job) => ({
|
|
...job,
|
|
numberOfFoundListings: listingStorage.getNumberOfAllKnownListings(job.id),
|
|
}))
|
|
.value();
|
|
};
|