UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

112 lines (111 loc) 4.28 kB
import { CreatePrinterDto, PrinterDto } from "../interfaces/printer.dto.js"; import { Printer } from "../../entities/printer.entity.js"; import { BaseService } from "./base.service.js"; import { validateInput } from "../../handlers/validators.js"; import { printerEvents } from "../../constants/event.constants.js"; import { defaultHttpProtocol } from "../../utils/url.utils.js"; import { normalizeUrl } from "../../utils/normalize-url.js"; import { createPrinterSchema, updatePrinterDisabledReasonSchema, updatePrinterEnabledSchema } from "../validators/printer-service.validation.js"; //#region src/services/orm/printer.service.ts var PrinterService = class PrinterService extends BaseService(Printer, PrinterDto, CreatePrinterDto) { logger; constructor(loggerFactory, typeormService, eventEmitter2) { super(typeormService); 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 this.repository.find({ order: { dateAdded: "ASC" } }); } async create(newPrinter, emitEvent = true) { const mergedPrinter = await this.validateAndDefault(newPrinter); mergedPrinter.dateAdded = Date.now(); const printer = await super.create(mergedPrinter); if (emitEvent) this.eventEmitter2.emit(printerEvents.printerCreated, { printer }); return printer; } /** * Explicit patching of printer document */ async update(printerId, partial) { const printer = await this.get(printerId); if (partial.printerURL) partial.printerURL = normalizeUrl(partial.printerURL, { defaultProtocol: defaultHttpProtocol }); Object.assign(printer, partial); const { printerURL, apiKey, enabled, name, printerType, password, username } = await validateInput(printer, createPrinterSchema); const updatedPrinter = await super.update(printerId, { printerURL, name, apiKey, enabled, printerType, password: password ?? void 0, username: username ?? void 0 }); this.eventEmitter2.emit(printerEvents.printerUpdated, { printer }); return updatedPrinter; } async batchImport(printers) { if (!printers?.length) return []; const validatedPrinters = []; for (let printer of printers) { const validated = await this.validateAndDefault(printer); validatedPrinters.push(validated); } this.logger.log("Validation passed"); const newPrinters = []; for (let printer of validatedPrinters) { const createdPrinter = await this.create(printer, false); newPrinters.push(createdPrinter); } this.logger.log("Batch create succeeded"); this.eventEmitter2.emit(printerEvents.batchPrinterCreated, { printers: newPrinters }); return newPrinters; } async delete(printerId, emitEvent = true) { await this.repository.delete([printerId]); if (emitEvent) this.eventEmitter2.emit(printerEvents.printersDeleted, { printerIds: [printerId] }); } async deleteMany(printerIds, emitEvent = true) { await this.repository.delete(printerIds); if (emitEvent) this.eventEmitter2.emit(printerEvents.printersDeleted, { printerIds }); } async updateDisabledReason(printerId, disabledReason) { await validateInput({ disabledReason }, updatePrinterDisabledReasonSchema); return this.update(printerId, { disabledReason }); } async updateEnabled(printerId, enabled) { await validateInput({ enabled }, updatePrinterEnabledSchema); return this.update(printerId, { enabled }); } updateFeedRate(printerId, feedRate) { return this.update(printerId, { feedRate }); } updateFlowRate(printerId, flowRate) { return this.update(printerId, { flowRate }); } async validateAndDefault(printer) { const mergedPrinter = { enabled: true, ...printer }; if (mergedPrinter.printerURL?.length) mergedPrinter.printerURL = normalizeUrl(mergedPrinter.printerURL, { defaultProtocol: defaultHttpProtocol }); return await validateInput(mergedPrinter, createPrinterSchema); } }; //#endregion export { PrinterService }; //# sourceMappingURL=printer.service.js.map