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.

61 lines (60 loc) 1.98 kB
import { NotFoundException } from "../../exceptions/runtime.exceptions.js"; import { DEFAULT_PAGE } from "../interfaces/page.interface.js"; import { validate } from "class-validator"; import { EntityNotFoundError } from "typeorm"; //#region src/services/orm/base.service.ts function BaseService(entity, dto, createDTO, updateDto) { class BaseServiceHost { repository; constructor(typeormService) { this.typeormService = typeormService; this.repository = typeormService.getDataSource().getRepository(entity); } async get(id, options) { try { if (id === null || id === void 0) throw new EntityNotFoundError(entity, "Id was not provided"); return this.repository.findOneOrFail({ ...options, where: { id } }); } catch (e) { if (e instanceof EntityNotFoundError) throw new NotFoundException(`The entity ${entity} with the provided id was not found`); throw e; } } async list(options) { return this.repository.find(options); } async listPaged(page = DEFAULT_PAGE, options) { return this.repository.find({ take: page.pageSize, skip: page.pageSize * page.page, ...options }); } async update(id, updateDto) { const entity = await this.get(id); await validate(updateDto); await validate(Object.assign(entity, updateDto)); await this.repository.update(entity.id, updateDto); return await this.get(id); } async create(dto) { if ("id" in dto && dto.id !== void 0 && dto.id !== null) throw new Error("Cannot create entity with an existing ID. Use update method instead."); const entity = this.repository.create(dto); await validate(entity); return await this.repository.save(entity); } async delete(id) { const entity = await this.get(id); await this.repository.delete(entity.id); } async deleteMany(ids) { await this.repository.delete(ids); } } return BaseServiceHost; } //#endregion export { BaseService }; //# sourceMappingURL=base.service.js.map