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