mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-05-02 14:39:54 -05:00
Merge pull request #899 from bluewave-labs/feat/be/documentation
Add JSdocs to SettingsService, add descriptions of services
This commit is contained in:
@@ -21,7 +21,6 @@ const queueRouter = require("./routes/queueRoute");
|
||||
const JobQueue = require("./service/jobQueue");
|
||||
const NetworkService = require("./service/networkService");
|
||||
const EmailService = require("./service/emailService");
|
||||
const PageSpeedService = require("./service/pageSpeedService");
|
||||
const SettingsService = require("./service/settingsService");
|
||||
const SERVICE_NAME = "Server";
|
||||
|
||||
@@ -73,7 +72,6 @@ const startApp = async () => {
|
||||
req.db = db;
|
||||
req.jobQueue = jobQueue;
|
||||
req.emailService = emailService;
|
||||
req.pageSpeedService = pageSpeedService;
|
||||
req.settingsService = settingsService;
|
||||
next();
|
||||
});
|
||||
@@ -136,7 +134,6 @@ const startApp = async () => {
|
||||
networkService,
|
||||
settingsService
|
||||
);
|
||||
const pageSpeedService = new PageSpeedService();
|
||||
|
||||
const cleanup = async () => {
|
||||
if (cleaningUp) {
|
||||
|
||||
@@ -5,11 +5,18 @@ const JOBS_PER_WORKER = 5;
|
||||
const logger = require("../utils/logger");
|
||||
const { errorMessages, successMessages } = require("../utils/messages");
|
||||
const SERVICE_NAME = "JobQueue";
|
||||
|
||||
/**
|
||||
* JobQueue
|
||||
*
|
||||
* This service is responsible for managing the job queue.
|
||||
* It handles enqueuing, dequeuing, and processing jobs.
|
||||
* It scales the number of workers based on the number of jobs/worker
|
||||
*/
|
||||
class JobQueue {
|
||||
/**
|
||||
* Constructs a new JobQueue
|
||||
* @constructor
|
||||
* @param {SettingsService} settingsService - The settings service
|
||||
* @throws {Error}
|
||||
*/
|
||||
constructor(settingsService) {
|
||||
|
||||
@@ -4,6 +4,13 @@ const logger = require("../utils/logger");
|
||||
const http = require("http");
|
||||
const { errorMessages, successMessages } = require("../utils/messages");
|
||||
|
||||
/**
|
||||
* NetworkService
|
||||
*
|
||||
* This service handles all network requests on the back end
|
||||
* This includes pings, http requests, and pagespeed checks
|
||||
*/
|
||||
|
||||
class NetworkService {
|
||||
constructor(db, emailService) {
|
||||
this.db = db;
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
const PageSpeedCheck = require("../models/PageSpeedCheck");
|
||||
const axios = require("axios");
|
||||
const logger = require("../utils/logger");
|
||||
|
||||
class PageSpeedService {
|
||||
constructor() {
|
||||
this.SERVICE_NAME = "PageSpeedService";
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs a PageSpeed check using Google Lighthouse API.
|
||||
* @param {string} url - The URL to check.
|
||||
* @returns {Promise<Object>} The results from the PageSpeed API.
|
||||
*/
|
||||
async runPageSpeedCheck(url) {
|
||||
try {
|
||||
const response = await axios.get(
|
||||
"https://pagespeedonline.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.google.com&category=seo&category=accessibility&category=best-practices&category=performance"
|
||||
);
|
||||
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
logger.error(`Error running PageSpeed check for ${url}`, {
|
||||
service: this.SERVICE_NAME,
|
||||
error: error.message,
|
||||
});
|
||||
error.service === undefined ? (error.service = SERVICE_NAME) : null;
|
||||
error.method === undefined ? (error.method = "runPageSpeedCheck") : null;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new PageSpeedCheck document.
|
||||
* @param {Object} data - The data for the new PageSpeedCheck.
|
||||
* @returns {Promise<PageSpeedCheck>} The created PageSpeedCheck document.
|
||||
*/
|
||||
async createPageSpeedCheck(data) {
|
||||
try {
|
||||
const newPageSpeedCheck = new PageSpeedCheck(data);
|
||||
return await newPageSpeedCheck.save();
|
||||
} catch (error) {
|
||||
error.service === undefined ? (error.service = SERVICE_NAME) : null;
|
||||
error.method === undefined
|
||||
? (error.method = "createPageSpeedCheck")
|
||||
: null;
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = PageSpeedService;
|
||||
@@ -1,6 +1,7 @@
|
||||
const { env } = require("process");
|
||||
const AppSettings = require("../models/AppSettings");
|
||||
const SERVICE_NAME = "SettingsService";
|
||||
|
||||
// Load settings from environment variables
|
||||
const envConfig = {
|
||||
logLevel: undefined,
|
||||
apiBaseUrl: undefined,
|
||||
@@ -17,19 +18,34 @@ const envConfig = {
|
||||
systemEmailAddress: process.env.SYSTEM_EMAIL_ADDRESS,
|
||||
systemEmailPassword: process.env.SYSTEM_EMAIL_PASSWORD,
|
||||
};
|
||||
|
||||
/**
|
||||
* SettingsService
|
||||
*
|
||||
* This service is responsible for loading and managing the application settings.
|
||||
* It gives priority to environment variables and will only load settings
|
||||
* from the database if they are not set in the environment.
|
||||
*/
|
||||
class SettingsService {
|
||||
constructor() {
|
||||
/**
|
||||
* Constructs a new SettingsService
|
||||
* @constructor
|
||||
* @throws {Error}
|
||||
*/ constructor() {
|
||||
this.settings = { ...envConfig };
|
||||
}
|
||||
|
||||
async loadSettings() {
|
||||
/**
|
||||
* Load settings from the database and merge with environment settings.
|
||||
* If there are any settings that weren't set by environment variables, use user settings from the database.
|
||||
* @returns {Promise<Object>} The merged settings.
|
||||
* @throws Will throw an error if settings are not found in the database or if settings have not been loaded.
|
||||
*/ async loadSettings() {
|
||||
try {
|
||||
const dbSettings = await AppSettings.findOne();
|
||||
if (!this.settings) {
|
||||
throw new Error("Settings not found");
|
||||
}
|
||||
// Try to load settings from env first, if not found, load from db
|
||||
|
||||
// If there are any settings that weren't set by environment variables, use user settings from DB
|
||||
for (const key in envConfig) {
|
||||
if (envConfig[key] === undefined && dbSettings[key] !== undefined) {
|
||||
this.settings[key] = dbSettings[key];
|
||||
@@ -46,11 +62,18 @@ class SettingsService {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reload settings by calling loadSettings.
|
||||
* @returns {Promise<Object>} The reloaded settings.
|
||||
*/
|
||||
async reloadSettings() {
|
||||
return this.loadSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current settings.
|
||||
* @returns {Object} The current settings.
|
||||
* @throws Will throw an error if settings have not been loaded.
|
||||
*/
|
||||
getSettings() {
|
||||
if (!this.settings) {
|
||||
throw new Error("Settings have not been loaded");
|
||||
|
||||
Reference in New Issue
Block a user