@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
JavaScript
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