Здравствуйте. Помогите добить последнее условие в задаче.
Есть следующая задача:
нужно написать функцию, которая
- Получает данные по всем работникам
- Считаем среднее-арифметическое по ЗП
- Тем сотрудникам, у которых ЗП меньше средней - повышаем на 20%, у кого больше - на 10%
- Если запрос прошел успешно - отправлять сотруднику уведомление об увеличении ЗП тектом: Hello, <имя>! Congratulations, your new salary is <новая ЗП>!
- Если запрос завершился неудачей - отправлять данные ошибки администратору
- По итогу отправить суммарное ЗП работников в бухгалтерию
Должна всегда возвращать resolved промис с числовым значением, сколько зарплат успешно повышено.
Все функции для получения/изменения данных асинхронны и возвращают промисы.
Вам предоставлены функции:
api.getEmployees(); // Возвращает массив с объектами {id: 343, name: 'Alex', salary: 20000}
api.setEmployeeSalary(employeeId, newSalary); // Принимает id сотрудника и новую зарплату. Возвращает новые данные по сотруднику.
api.notifyEmployee(employeeId, text); // Принимает id сотрудника и текст уведомления
api.notifyAdmin(error); // Принимает ошибку
api.sendBudgetToAccounting(summarySalaries); // Принимает суммарную ЗП
Вот весь код
const api = {
_employees: [
{ id: 1, name: 'Alex', salary: 120000 },
{ id: 2, name: 'Fred', salary: 110000 },
{ id: 3, name: 'Bob', salary: 80000 },
],
getEmployees() {
return new Promise((resolve) => {
resolve(this._employees.slice());
});
},
setEmployeeSalary(employeeId, newSalary) {
return new Promise((resolve) => {
const updatedEmployees = this._employees.map((employee) =>
employee.id !== employeeId
? employee
: {
...employee,
salary: newSalary,
}
);
this._employees = updatedEmployees;
resolve(this._employees.find(({ id }) => id === employeeId));
});
},
notifyEmployee(employeeId, text) {
return new Promise((resolve) => {
resolve(true);
});
},
notifyAdmin(error) {
return new Promise((resolve) => {
resolve();
});
},
setEmployees(newEmployees) {
return new Promise((resolve) => {
this._employees = newEmployees;
resolve();
});
},
sendBudgetToAccounting(newBudget) {
return new Promise((resolve) => {
resolve();
});
},
};
const getMiddleSalary = (data) => {
return data.reduce((a, c) => {
a += c.salary / data.length
return Math.floor(a);
}, 0)
}
const salaryIncrease = (middle, data) => {
const result = data.map((elem) => {
if (elem.salary < middle) {
elem.salary *= 1.2
} else {
elem.salary *= 1.1
}
return elem;
})
return result;
}
const handleEmployeeSalary = async (data) => {
const middle = getMiddleSalary(data);
console.log(middle)
const salaryInc = salaryIncrease(middle, data);
const arr = [];
for (let { id, salary } of salaryInc) {
arr.push(await api.setEmployeeSalary(id, salary))
}
return arr;
}
const notifyEmployee = ({ id, salary, name }) => {
return api.notifyEmployee(id, `Hello, ${name}! Congratulations, your new salary is ${salary}!`)
}
const sendBudgetToAccounting = ({ salary }) => {
return api.sendBudgetToAccounting(salary);
}
const notifyAdmin = (error) => {
return api.notifyAdmin(error);
}
async function increaseSalary() {
try {
const data = await api.getEmployees();
const newData = await handleEmployeeSalary(data);
newData.forEach((data) => notifyEmployee(data));
const result = await api.sendBudgetToAccounting(
newData.reduce((res, c) => {
res += c['salary']
return res
} ,0)).then(()=> data.length)
return result;
} catch (error) {
await notifyAdmin(error)
}
}
Тест
✓
функция должна возвращать промис (21ms)
✓ должна корректно увеличивать ЗП всем сотрудникам и отправлять бюджет (12ms)
✓ должна отправлять уведомление сотрудникам (10ms)
✕ в случае ошибки увеличения ЗП должна отправлять уведомление администратору, но не пользователю (10ms)
P.S Просьба не бомбить на код, я ученик
Помогите, пожалуйста решить задачу.