mirror of
https://github.com/sergeyyarkov/asu_tools_service.git
synced 2026-10-11 02:19:09 +03:00
97 lines
3.1 KiB
JavaScript
97 lines
3.1 KiB
JavaScript
import sql from "mssql";
|
|
import db from "#root/db.js";
|
|
import { ReportModel } from "#models/index.js";
|
|
import { ReportExecutorTable, ReportTable } from "#tables/index.js";
|
|
|
|
/** @import { ReportColumns } from "#tables/report.table.js" */
|
|
|
|
export const reportRepository = {
|
|
async getAll() {
|
|
const request = new sql.Request(db);
|
|
const result = await request.query(`select * from dbo.${ReportTable.tableName};`);
|
|
const reports = ReportModel.fromRecordset(result.recordset);
|
|
|
|
return reports;
|
|
},
|
|
|
|
async getLast() {
|
|
const request = new sql.Request(db);
|
|
const result = await request.query(`select top 1 * from ${ReportTable.tableName} order by id desc`);
|
|
const report = ReportModel.fromRecordset(result.recordset);
|
|
|
|
return report.at(0);
|
|
},
|
|
|
|
/**
|
|
* @param {ReportColumns} entry
|
|
*/
|
|
async create(entry) {
|
|
const request = new sql.Request(db);
|
|
const report = new ReportModel(entry);
|
|
|
|
request.input("date", ReportTable.getColumn("date"), report.date);
|
|
request.input("reasonCall", ReportTable.getColumn("reason_call"), report.reason_call);
|
|
request.input("jobDesc", ReportTable.getColumn("job_description"), report.job_description);
|
|
request.input("rootCause", ReportTable.getColumn("root_cause"), report.root_cause);
|
|
request.input("applicantId", ReportTable.getColumn("applicant_id"), report.applicant_id);
|
|
request.input("eqpId", ReportTable.getColumn("equipment_id"), report.equipment_id);
|
|
|
|
const createdReport = await request.query(
|
|
`insert into ${ReportTable.table.name}
|
|
(date, reason_call, job_description, root_cause, applicant_id, equipment_id)
|
|
output inserted.id
|
|
values (@date, @reasonCall, @jobDesc, @rootCause, @applicantId, @eqpId);
|
|
`
|
|
);
|
|
|
|
report.id = Number.parseInt(createdReport.recordset[0].id, 10);
|
|
|
|
return report;
|
|
},
|
|
|
|
/**
|
|
* @param {Record<string, Array<string | number>>[]} links
|
|
* @param {sql.Transaction} [trx]
|
|
*/
|
|
async attachExecutors(links, trx) {
|
|
const request = trx ? new sql.Request(trx) : new sql.Request(db);
|
|
const table = ReportExecutorTable.createInstance();
|
|
|
|
for (const report of Object.values(links)) {
|
|
for (const [rId, executorIds] of Object.entries(report)) {
|
|
executorIds.forEach((eId) => table.rows.add(rId, eId));
|
|
}
|
|
}
|
|
|
|
await request.bulk(table);
|
|
return table.rows.length;
|
|
},
|
|
|
|
/**
|
|
* @param {ReportColumns[]} entries
|
|
* @param {sql.Transaction} [trx]
|
|
*/
|
|
async bulk(entries, trx) {
|
|
const request = trx ? new sql.Request(trx) : new sql.Request(db);
|
|
const table = ReportTable.createInstance();
|
|
const lastReportId = (await this.getLast())?.id || 0;
|
|
let nextAddId = typeof lastReportId === "string" ? Number.parseInt(lastReportId, 10) : lastReportId;
|
|
|
|
for (const e of entries) {
|
|
table.rows.add(
|
|
++nextAddId,
|
|
e.date,
|
|
e.reason_call,
|
|
e.job_description,
|
|
e.root_cause,
|
|
e.applicant_id,
|
|
e.equipment_id
|
|
);
|
|
}
|
|
|
|
const res = await request.bulk(table);
|
|
|
|
return { rowsAffected: res.rowsAffected, addedRowIds: table.rows.map((r) => r[0]) };
|
|
}
|
|
};
|