# Interview ## Task 1 What is wrong? ![](https://i.imgur.com/z2rIrRJ.png) ## 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с. При цьому бекенд адмін панелі не відповідає, і при отриманні нових запитів падає. Які є варіанти вирішення цієї ситуації.