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; } } };