From 2de442be92e5b5204c864df0a9bdda234ce04bd2 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Mon, 30 Dec 2024 10:19:02 -0500 Subject: [PATCH] dev: add apps module, migrate AppInformationService There are now several services related to apps, and RecommendedAppsService is about to be added, making this a good time to create a separate module for these services and migrate the legacy service AppInformationService. During migration it was realized that most of the initialization needed to occur at boot.consolidation rather than boot.init because the database needs to be initialized first. --- src/backend/exports.js | 2 ++ src/backend/src/CoreModule.js | 2 -- .../apps}/AppInformationService.js | 17 ++++++++--------- src/backend/src/modules/apps/AppsModule.js | 14 ++++++++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) rename src/backend/src/{services => modules/apps}/AppInformationService.js (99%) create mode 100644 src/backend/src/modules/apps/AppsModule.js diff --git a/src/backend/exports.js b/src/backend/exports.js index 9ea422cc5..4bc024dd9 100644 --- a/src/backend/exports.js +++ b/src/backend/exports.js @@ -32,6 +32,7 @@ const { Core2Module } = require("./src/modules/core/Core2Module.js"); const { TemplateModule } = require("./src/modules/template/TemplateModule.js"); const { PuterFSModule } = require("./src/modules/puterfs/PuterFSModule.js"); const { PerfMonModule } = require("./src/modules/perfmon/PerfMonModule.js"); +const { AppsModule } = require("./src/modules/apps/AppsModule.js"); module.exports = { @@ -53,6 +54,7 @@ module.exports = { CoreModule, WebModule, TemplateModule, + AppsModule, ], // Pre-built modules diff --git a/src/backend/src/CoreModule.js b/src/backend/src/CoreModule.js index d921bca02..b4f6d2757 100644 --- a/src/backend/src/CoreModule.js +++ b/src/backend/src/CoreModule.js @@ -373,7 +373,6 @@ const install_legacy = async ({ services }) => { const { OperationTraceService } = require('./services/OperationTraceService'); const { ClientOperationService } = require('./services/ClientOperationService'); const { EngPortalService } = require('./services/EngPortalService'); - const { AppInformationService } = require('./services/AppInformationService'); const { FileCacheService } = require('./services/file-cache/FileCacheService'); // === Services which do not yet extend BaseService === @@ -381,7 +380,6 @@ const install_legacy = async ({ services }) => { services.registerService('operationTrace', OperationTraceService); services.registerService('file-cache', FileCacheService); services.registerService('client-operation', ClientOperationService); - services.registerService('app-information', AppInformationService); services.registerService('engineering-portal', EngPortalService); }; diff --git a/src/backend/src/services/AppInformationService.js b/src/backend/src/modules/apps/AppInformationService.js similarity index 99% rename from src/backend/src/services/AppInformationService.js rename to src/backend/src/modules/apps/AppInformationService.js index 511bd8d14..d79af231a 100644 --- a/src/backend/src/services/AppInformationService.js +++ b/src/backend/src/modules/apps/AppInformationService.js @@ -19,10 +19,9 @@ */ const { asyncSafeSetInterval } = require('@heyputer/putility').libs.promise; const { MINUTE, SECOND } = require("@heyputer/putility").libs.time; -const { origin_from_url } = require("../util/urlutil"); -const { DB_READ } = require("./database/consts"); - -const uuidv4 = require('uuid').v4; +const { origin_from_url } = require("../../util/urlutil"); +const { DB_READ } = require("../../services/database/consts"); +const BaseService = require('../../services/BaseService'); /** @@ -35,15 +34,15 @@ const uuidv4 = require('uuid').v4; * up-to-date information about applications, facilitating features like app listings, * recent apps, and tag-based app discovery. */ -class AppInformationService { - constructor ({ services }) { - this.services = services; - this.log = services.get('log-service').create('app-info'); - +class AppInformationService extends BaseService { + _construct () { this.collections = {}; this.collections.recent = []; this.tags = {}; + } + + ['on_boot.consolidation'] () { // MySQL date format mapping for different groupings this.mysqlDateFormats = { diff --git a/src/backend/src/modules/apps/AppsModule.js b/src/backend/src/modules/apps/AppsModule.js new file mode 100644 index 000000000..5fd1dac19 --- /dev/null +++ b/src/backend/src/modules/apps/AppsModule.js @@ -0,0 +1,14 @@ +const { AdvancedBase } = require("@heyputer/putility"); + +class AppsModule extends AdvancedBase { + async install (context) { + const services = context.get('services'); + + const { AppInformationService } = require('./AppInformationService'); + services.registerService('app-information', AppInformationService); + } +} + +module.exports = { + AppsModule +};