# Interview
## Task 1
What is wrong?

## Task 2
File
```
module.exports = async (botId, entityId) => {
let project;
const bot = await helper.Bot.findOne({ botId }).exec();
if(bot) {
project = await helper.Project.findOne({ projectId: bot.projectId }).exec();
}
const entity = await helper.Entity.findOne({ entityId }).exec();
return { bot, entity, project };
};
```
## Task 3
Write function to check if number is simple
// 17
function isSimple(num) {
let isSimple = false;
for(let i = num - 1; i !==0; i--){
if(num % i === 0) isSimple = true
}
return isSimple;
}
## Task 4
Write function to check if array is sorted
const isArraySorted = (array) => {
}
## Task 5
Описати функцію перетину для двох масивів елементів
```
intersection([1,2,3,4,5],[3,4,5,6,7]); => [3,4,5]
intersection([1,5,45,-6],[-9,5,23, -90]); => [5]
const a = [
{value: 1, name },
{value: 2, name },
{value: 3, name },
];
const b = [
{value: 15, name },
{value: 3, name },
{value: 34, name },
];
... => [{value: 3, name },]
```
## Task 6
Ситуація: Для старту сервера необхідно 20с. Трафік на сервер починає надходити з моменту npm run start. Необхіодно тримати запити доти поки сервер не почне повноцінно функціонувати. В момент запуску, сервер заспавнить івент у івент емітер.
## Task 7
```
const permission = {
systemUserId: 4,
organizations: {
1: {
roleIds: [45],
systemFunctionIds: {
34: { availablePermissionTypes: [ 'POST' ] }
}
},
2: {
roleIds: [43],
systemFunctionIds: {
56: { availablePermissionTypes: [ 'PUT' ] },
57: { availablePermissionTypes: [ 'DELETE', 'GET' ] }
}
}
},
projects: {
78: {
organizationId: 1,
roleIds: [145],
systemFunctionIds: {
334: { availablePermissionTypes: [ 'POST' ] }
}
}
}
}
```
Перевірити описати перевірку чи даний об'єкт надає доступ для використання функції.
```
const checkPermission = (
systemFunctionId,
level,
permission,
options = { projectId: null, organizationId: null }
) => {
return permission[level][options["projectId"]].systemFunctionIds[systemFunctionId] ? true: null
}
checkPermission(334, 'project', permission, { projectId: 78}) => true
checkPermission(2344, 'project', permission, { projectId: 80}) => false
checkPermission(34, 'project', permission, { projectId: 78}) => true
```
## Task 8
Mongo collection
```
{
id: Number,
value: Numbder,
description: String,
locations: [
{ id: Number, location: String }
]
}
```
Count of documents: 6 000 457
Потрібно перетворити цю колекцію в наступну структуру
```
{
id: Number,
value: Numbder,
description: String,
locations: [
{ id: Number, address: String }
]
}
```
яким чином можна максимально безболісно конвертувати ці дані?
## Task 9
Створити middleware для обмеження кількості запитів в секунду, по одному і тому ж apiToken.
## Task 10
Є адмін панель, яка дозволяє генерувати звіт за певний період часу. Генерація звіту маєстабільний час виконання 10с. При цьому бекенд адмін панелі не відповідає, і при отриманні нових запитів падає. Які є варіанти вирішення цієї ситуації.