UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.

216 lines (215 loc) 7.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "PrinterService", { enumerable: true, get: function() { return PrinterService; } }); const _models = require("../../models"); const _runtimeexceptions = require("../../exceptions/runtime.exceptions"); const _validators = require("../../handlers/validators"); const _printerservicevalidation = require("../validators/printer-service.validation"); const _eventconstants = require("../../constants/event.constants"); const _normalizeurl = require("../../utils/normalize-url"); const _urlutils = require("../../utils/url.utils"); class PrinterService { eventEmitter2; logger; constructor(eventEmitter2, loggerFactory){ this.eventEmitter2 = eventEmitter2; this.logger = loggerFactory(PrinterService.name); } toDto(entity) { return { id: entity.id, name: entity.name, enabled: entity.enabled, disabledReason: entity.disabledReason, dateAdded: entity.dateAdded, apiKey: entity.apiKey, username: entity.username, password: entity.password, printerURL: entity.printerURL, printerType: entity.printerType }; } async list() { return _models.Printer.find({}, null, { sort: { dateAdded: 1 } }); } async get(printerId) { const filter = { _id: printerId }; const printer = await _models.Printer.findOne(filter); if (!printer) { throw new _runtimeexceptions.NotFoundException(`The printer with provided id was not found`); } return printer; } async create(newPrinter, emitEvent = true) { if (!newPrinter) throw new Error("Missing printer to create"); const mergedPrinter = await this.validateAndDefault(newPrinter); mergedPrinter.dateAdded = Date.now(); const printer = await _models.Printer.create(mergedPrinter); if (emitEvent) { this.eventEmitter2.emit(_eventconstants.printerEvents.printerCreated, { printer }); } return printer; } async update(printerId, updateData) { const printer = await this.get(printerId); updateData.printerURL = (0, _normalizeurl.normalizeUrl)(updateData.printerURL, { defaultProtocol: _urlutils.defaultHttpProtocol }); const { printerURL, apiKey, username, password, enabled, name, printerType } = await (0, _validators.validateInput)(updateData, _printerservicevalidation.createPrinterSchema); printer.printerURL = printerURL; printer.apiKey = apiKey; printer.username = username; printer.password = password; if (enabled !== undefined) { printer.enabled = enabled; } printer.name = name; printer.printerType = printerType; await printer.save(); this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, { printer }); return printer; } async deleteMany(printerIds, emitEvent = true) { await _models.Printer.deleteMany({ _id: { $in: printerIds } }); if (emitEvent) { this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, { printerIds }); } } async delete(printerId, emitEvent = true) { const filter = { _id: printerId }; await _models.Printer.findOneAndDelete(filter); if (emitEvent) { this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, { printerIds: [ printerId ] }); } } async batchImport(printers) { if (!printers?.length) return []; for (let printer of printers){ await this.validateAndDefault(printer); } this.logger.log("Validation passed"); const newPrinters = []; for (let printer of printers){ const createdPrinter = await this.create(printer, false); newPrinters.push(createdPrinter); } this.logger.log("Batch create succeeded"); this.eventEmitter2.emit(_eventconstants.printerEvents.batchPrinterCreated, { printers: newPrinters }); return newPrinters; } async updateFlowRate(printerId, flowRate) { const update = { flowRate }; await this.get(printerId); const printer = await _models.Printer.findByIdAndUpdate(printerId, update, { new: true, useFindAndModify: false }); if (printer) { this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, { printer }); } return printer; } async updateFeedRate(printerId, feedRate) { const update = { feedRate }; await this.get(printerId); const printer = await _models.Printer.findByIdAndUpdate(printerId, update, { new: true, useFindAndModify: false }); if (printer) { this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, { printer }); } return printer; } async updateEnabled(printerId, enabled) { const update = enabled ? { enabled, disabledReason: null } : { enabled }; await (0, _validators.validateInput)(update, _printerservicevalidation.updatePrinterEnabledSchema); await this.get(printerId); const printer = await _models.Printer.findByIdAndUpdate(printerId, update, { new: true, useFindAndModify: false }); if (printer) { this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, { printer }); } return printer; } async updateDisabledReason(printerId, disabledReason) { const enabled = !disabledReason?.length; const update = { disabledReason, enabled }; await (0, _validators.validateInput)(update, _printerservicevalidation.updatePrinterDisabledReasonSchema); await this.get(printerId); const printer = await _models.Printer.findByIdAndUpdate(printerId, update, { new: true, useFindAndModify: false }); if (printer) { this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, { printer }); } return printer; } async validateAndDefault(printer) { const mergedPrinter = { enabled: true, ...printer }; if (mergedPrinter.printerURL?.length) { mergedPrinter.printerURL = (0, _normalizeurl.normalizeUrl)(mergedPrinter.printerURL, { defaultProtocol: _urlutils.defaultHttpProtocol }); } return await (0, _validators.validateInput)(mergedPrinter, _printerservicevalidation.createPrinterSchema); } } //# sourceMappingURL=printer.service.js.map