UNPKG

@piggly/fastify-chassis

Version:

An ESM/CommonJS toolkit to help you to do common operations in your back-end applications with Fastify and NodeJS.

146 lines 4.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CleanUpService = void 0; const tslib_1 = require("tslib"); const ddd_toolkit_1 = require("@piggly/ddd-toolkit"); const debug_1 = tslib_1.__importDefault(require("debug")); /** * @file Handle clean up check services. * @copyright Piggly Lab 2024 */ class CleanUpService { /** * Handlers to check. * * @type {Map<string, () => Promise<boolean>>} * @protected * @memberof CleanUpService * @since 5.2.0 * @author Caique Araujo <caique@piggly.com.br> */ handlers; /** * Constructor. * * @public * @constructor * @memberof CleanUpService * @since 5.2.0 * @author Caique Araujo <caique@piggly.com.br> */ constructor() { this.handlers = new Map(); } /** * Check all handlers. * * Handlers are executed in registration order by default, which allows * controlling shutdown dependencies (e.g., stop workers before closing DB). * * @returns {Promise<{ * success: boolean; * services: Record<string, boolean>; * }>} * @public * @memberof CleanUpService * @since 5.3.0 * @throws {Error} If any handler fails. * @author Caique Araujo <caique@piggly.com.br> */ async clean() { let success = true; const services = {}; for (const [name, handler] of this.handlers) { (0, debug_1.default)('app:cleanup:handler')(`cleaning up ${name}...`); services[name] = await handler(); success = success && services[name]; (0, debug_1.default)('app:cleanup:handler')(`${name} responded with ${services[name]}`); } return { services, success, }; } /** * Register a new handler. * * @param {string} name * @param {() => Promise<boolean>} handler * @public * @memberof CleanUpService * @since 5.2.0 * @author Caique Araujo <caique@piggly.com.br> */ register(name, handler) { this.handlers.set(name, handler); } /** * Check all handlers. It will not throw any error. * * Handlers are executed in registration order by default, which allows * controlling shutdown dependencies (e.g., stop workers before closing DB). * * @returns {Promise<{ * success: boolean; * services: Record<string, boolean>; * }>} * @public * @memberof CleanUpService * @since 5.3.0 * @author Caique Araujo <caique@piggly.com.br> */ async softClean() { let success = true; const services = {}; for (const [name, handler] of this.handlers) { (0, debug_1.default)('app:cleanup:handler')(`cleaning up ${name}...`); try { services[name] = await handler(); } catch (error) { services[name] = false; (0, debug_1.default)('app:cleanup:error')(`${name} failed to clean up`, error); } finally { success = success && services[name]; (0, debug_1.default)('app:cleanup:handler')(`${name} responded with ${services[name]}`); } } return { services, success, }; } /** * Register application service. * * @param {CleanUpService} service * @public * @static * @memberof CleanUpService * @since 5.2.0 * @author Caique Araujo <caique@piggly.com.br> */ static register(service) { if (ddd_toolkit_1.ServiceProvider.has('CleanUpService')) { return; } ddd_toolkit_1.ServiceProvider.register('CleanUpService', service); } /** * Resolve application service. * * @returns {CleanUpService} * @throws {Error} If service is not registered. * @public * @static * @memberof CleanUpService * @since 5.2.0 * @author Caique Araujo <caique@piggly.com.br> */ static resolve() { return ddd_toolkit_1.ServiceProvider.resolve('CleanUpService'); } } exports.CleanUpService = CleanUpService; //# sourceMappingURL=CleanUpService.js.map