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.

104 lines (103 loc) 4 kB
import { BadRequestException, NotFoundException } from "../../exceptions/runtime.exceptions.js"; import { PrinterMaintenanceLog } from "../../entities/printer-maintenance-log.entity.js"; //#region src/services/orm/printer-maintenance-log.service.ts var PrinterMaintenanceLogService = class PrinterMaintenanceLogService { logger; repository; constructor(loggerFactory, typeormService, printerService) { this.printerService = printerService; this.logger = loggerFactory(PrinterMaintenanceLogService.name); this.repository = typeormService.getDataSource().getRepository(PrinterMaintenanceLog); } toDto(entity) { return { id: entity.id, createdAt: entity.createdAt, createdBy: entity.createdBy, createdByUserId: entity.createdByUserId, printerId: entity.printerId, printerName: entity.printerName, printerUrl: entity.printerUrl, metadata: entity.metadata, completed: entity.completed, completedAt: entity.completedAt, completedByUserId: entity.completedByUserId, completedBy: entity.completedBy }; } async create(dto, userId, username) { const printer = await this.printerService.get(dto.printerId); if (await this.repository.findOne({ where: { printerId: dto.printerId, completed: false } })) throw new BadRequestException(`Printer ${printer.name} already has an active maintenance log`); const log = this.repository.create({ printerId: dto.printerId, printerName: printer.name, printerUrl: printer.printerURL, metadata: dto.metadata, createdBy: username, createdByUserId: userId, completed: false }); await this.repository.save(log); await this.printerService.updateDisabledReason(dto.printerId, this.buildDisabledReasonFromMetadata(dto.metadata)); return log; } async complete(logId, dto, userId, username) { const log = await this.repository.findOne({ where: { id: logId } }); if (!log) throw new NotFoundException(`Maintenance log with id ${logId} not found`); if (log.completed) throw new BadRequestException(`Maintenance log ${logId} is already completed`); log.metadata = { ...log.metadata, completionNotes: dto.completionNotes }; log.completed = true; log.completedAt = /* @__PURE__ */ new Date(); log.completedBy = username; log.completedByUserId = userId; await this.repository.save(log); if (log.printerId) await this.printerService.updateDisabledReason(log.printerId, null); return log; } async get(logId) { const log = await this.repository.findOne({ where: { id: logId } }); if (!log) throw new NotFoundException(`Maintenance log with id ${logId} not found`); return log; } async getActiveByPrinterId(printerId) { return this.repository.findOne({ where: { printerId, completed: false } }); } async list(filters) { const { printerId, completed, page = 1, pageSize = 20 } = filters; const queryBuilder = this.repository.createQueryBuilder("log"); if (printerId !== void 0) queryBuilder.andWhere("log.printerId = :printerId", { printerId }); if (completed !== void 0) queryBuilder.andWhere("log.completed = :completed", { completed }); queryBuilder.orderBy("log.createdAt", "DESC"); queryBuilder.skip((page - 1) * pageSize); queryBuilder.take(pageSize); const [logs, total] = await queryBuilder.getManyAndCount(); return { logs, total }; } async delete(logId) { const log = await this.get(logId); if (!log.completed && log.printerId) await this.printerService.updateDisabledReason(log.printerId, null); await this.repository.delete(logId); } buildDisabledReasonFromMetadata(metadata) { const parts = []; if (metadata.cause) parts.push(metadata.cause); if (metadata.partsInvolved && metadata.partsInvolved.length > 0) parts.push(`Parts: ${metadata.partsInvolved.join(", ")}`); if (metadata.notes) parts.push(metadata.notes); return parts.join(" - ") || "Under maintenance"; } }; //#endregion export { PrinterMaintenanceLogService }; //# sourceMappingURL=printer-maintenance-log.service.js.map