40316-vm/backend/src/services/attendance.js
2026-06-24 15:52:42 +00:00

120 lines
2.4 KiB
JavaScript

const db = require('../db/models');
const AttendanceDBApi = require('../db/api/attendance');
const parseImportFile = require('./importFileParser');
const ValidationError = require('./notifications/errors/validation');
module.exports = class AttendanceService {
static async create(data, currentUser) {
const transaction = await db.sequelize.transaction();
try {
await AttendanceDBApi.create(
data,
{
currentUser,
transaction,
},
);
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async bulkImport(req, res) {
const transaction = await db.sequelize.transaction();
try {
const results = await parseImportFile(req, res);
await AttendanceDBApi.bulkImport(results, {
transaction,
ignoreDuplicates: true,
validate: true,
currentUser: req.currentUser
});
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async update(data, id, currentUser) {
const transaction = await db.sequelize.transaction();
try {
let attendance = await AttendanceDBApi.findBy(
{id},
{ transaction, currentUser },
);
if (!attendance) {
throw new ValidationError(
'attendanceNotFound',
);
}
const updatedAttendance = await AttendanceDBApi.update(
id,
data,
{
currentUser,
transaction,
},
);
await transaction.commit();
return updatedAttendance;
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async deleteByIds(ids, currentUser) {
const transaction = await db.sequelize.transaction();
try {
await AttendanceDBApi.deleteByIds(ids, {
currentUser,
transaction,
});
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async remove(id, currentUser) {
const transaction = await db.sequelize.transaction();
try {
await AttendanceDBApi.remove(
id,
{
currentUser,
transaction,
},
);
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
};