import * as uuid from 'node-uuid'; import { RenovationProjectTpl, RenovationProject, } from 'iworks-db-model'; import { transaction } from 'objection'; import { omit } from 'lodash'; import { IProjectTpl, ProjectTplStatus, IUpdateProjectTpl, } from '../model/renovationProjectTpl'; export function createRenovationProjectTpl(projectTpl: Partial) : Promise> { const date = (new Date()).toISOString(); const created = date; const updated = date; const projectTplData: Partial = Object.assign( { created, updated, id: uuid.v4(), status: ProjectTplStatus.notactive, }, projectTpl, ); return RenovationProjectTpl .query() .insert(projectTplData); } export function deleteRenovationProjectTpl(projectTplId: string) { const knex = RenovationProjectTpl.knex(); return transaction(knex, async (trx) => { const renovationProjectsFromTpl = await RenovationProject .query(trx) .where('renovation_project_tpl_id', projectTplId); if (renovationProjectsFromTpl.length) { throw new Error(`Cannot delete renovation project template ${projectTplId}. Linked projects exist. You can archive it if you like.`); } const numDeleted = await RenovationProjectTpl .query(trx) .where('id', projectTplId) .delete(); return numDeleted > 0; }); } export function updateRenovationProjectTpl(projectTpl: Partial) { const date = (new Date()).toISOString(); const updated = date; const updateData = { updated, ...omit(projectTpl, ['id']), }; return RenovationProjectTpl .query() .patchAndFetchById(projectTpl.id, updateData); }