32315/backend/src/services/customer_support_reps.js
2025-06-18 16:32:59 +00:00

119 lines
3.1 KiB
JavaScript

const db = require('../db/models');
const Customer_support_repsDBApi = require('../db/api/customer_support_reps');
const processFile = require('../middlewares/upload');
const ValidationError = require('./notifications/errors/validation');
const csv = require('csv-parser');
const axios = require('axios');
const config = require('../config');
const stream = require('stream');
module.exports = class Customer_support_repsService {
static async create(data, currentUser) {
const transaction = await db.sequelize.transaction();
try {
await Customer_support_repsDBApi.create(data, {
currentUser,
transaction,
});
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async bulkImport(req, res, sendInvitationEmails = true, host) {
const transaction = await db.sequelize.transaction();
try {
await processFile(req, res);
const bufferStream = new stream.PassThrough();
const results = [];
await bufferStream.end(Buffer.from(req.file.buffer, 'utf-8')); // convert Buffer to Stream
await new Promise((resolve, reject) => {
bufferStream
.pipe(csv())
.on('data', (data) => results.push(data))
.on('end', async () => {
console.log('CSV results', results);
resolve();
})
.on('error', (error) => reject(error));
});
await Customer_support_repsDBApi.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 customer_support_reps = await Customer_support_repsDBApi.findBy(
{ id },
{ transaction },
);
if (!customer_support_reps) {
throw new ValidationError('customer_support_repsNotFound');
}
const updatedCustomer_support_reps =
await Customer_support_repsDBApi.update(id, data, {
currentUser,
transaction,
});
await transaction.commit();
return updatedCustomer_support_reps;
} catch (error) {
await transaction.rollback();
throw error;
}
}
static async deleteByIds(ids, currentUser) {
const transaction = await db.sequelize.transaction();
try {
await Customer_support_repsDBApi.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 Customer_support_repsDBApi.remove(id, {
currentUser,
transaction,
});
await transaction.commit();
} catch (error) {
await transaction.rollback();
throw error;
}
}
};