diff --git a/server/routers/kfu-m-24-1/sberhubproject/events/data/event.json b/server/routers/kfu-m-24-1/sberhubproject/events/data/event.json index bd44f1e..0d50f1c 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/events/data/event.json +++ b/server/routers/kfu-m-24-1/sberhubproject/events/data/event.json @@ -9,13 +9,13 @@ "id": 2, "name": "Командная встреча", "description": "Ежеквартальная встреча для согласования целей", - "date": "2025-02-02T00:00:00Z" + "date": 1672444800000 }, { "id": 3, "name": "День рождения", "description": "Празднование 30-летия Ивана", - "date": "2025-02-02T00:00:00Z" + "date": "2025-01-25" }, { "id": 4, diff --git a/server/routers/kfu-m-24-1/sberhubproject/gigachat/controller.js b/server/routers/kfu-m-24-1/sberhubproject/gigachat/controller.js new file mode 100644 index 0000000..4e64dfb --- /dev/null +++ b/server/routers/kfu-m-24-1/sberhubproject/gigachat/controller.js @@ -0,0 +1,83 @@ +const { v4: uuidv4 } = require('uuid'); +const axios = require('axios'); +const https = require('https'); + +process.env.GIGACHAT_AUTH = + 'YzA2ODg0NTYtYzE3Yi00OGJkLTkyY2MtMzdkM2U0YjE4ZmQ5Ojc0ZWVhN2YxLTI5MWYtNDNiZS05MTY2LWIyZjg5MGY2YWQ3Ng=='; + +const agent = new https.Agent({ + rejectUnauthorized: false +}); + +class controller { + async getText(req, res) { + try { + const { text } = req.body; + + const headers = { + Authorization: `Basic ${process.env.GIGACHAT_AUTH}`, + RqUID: uuidv4(), + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'application/json' + }; + + const access_token = await axios + .post('https://ngw.devices.sberbank.ru:9443/api/v2/oauth', encodeURI(`scope=GIGACHAT_API_PERS`), { + headers: headers, + httpsAgent: agent + }) + .then((response) => { + return response.data.access_token; + }) + .catch((error) => { + return error; + }); + + const systemMessage = ` Создай анализ совместимости между двумя людьми и отобрази результат исключительно в формате JSON, который будет результатом работы 'JSON.stringify()'. Он должен состоять из следующих частей: + +1. **Совместимость** в процентах. +2. **Список точек соприкосновения**. Перечисли их через запятую. +3. **Список потенциальных различий**. Перечисли через запятую. + +Результат должен быть строкой JSON, полученной через 'JSON.stringify()', и не содержать дополнительных пояснений или текста. + +Пример: + {"compatibility": 70, "pointsOfContact": ["общие интересы", "совместные увлечения", "взаимное уважение"], "potentialDifferences": ["различные жизненные цели", "противоположные характеры", "несовпадающие ценности"]} +`; + + const textAI = await axios + .post( + 'https://gigachat.devices.sberbank.ru/api/v1/chat/completions', + JSON.stringify({ + model: 'GigaChat:latest', + messages: [ + { + role: 'user', + content: systemMessage + text + } + ], + profanity_check: true + }), + { + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${access_token}` + }, + httpsAgent: agent + } + ) + .then((response) => { + return response.data.choices[0].message.content; + }) + .catch((error) => { + return error; + }); + + res.status(200).json({ text: textAI }); + } catch (e) { + res.status(400).json({ message: e }); + } + } +} + +module.exports = new controller(); diff --git a/server/routers/kfu-m-24-1/sberhubproject/gigachat/index.js b/server/routers/kfu-m-24-1/sberhubproject/gigachat/index.js new file mode 100644 index 0000000..6239fd8 --- /dev/null +++ b/server/routers/kfu-m-24-1/sberhubproject/gigachat/index.js @@ -0,0 +1,6 @@ +const router = require('express').Router(); +const controller = require('./controller'); + +router.post('/', controller.getText); + +module.exports = router; diff --git a/server/routers/kfu-m-24-1/sberhubproject/index.js b/server/routers/kfu-m-24-1/sberhubproject/index.js index cd881f4..3902d92 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/index.js +++ b/server/routers/kfu-m-24-1/sberhubproject/index.js @@ -2,8 +2,17 @@ const router = require('express').Router(); const interestsRouter = require('./interests'); const usersRouter = require('./users'); const eventsRouter = require('./events'); +const gigachatRouter = require('./gigachat'); module.exports = router; +const delay = + (ms = 1000) => + (req, res, next) => { + setTimeout(next, ms); + }; + +router.use(delay()); router.use('/interests', interestsRouter); router.use('/users', usersRouter); router.use('/events', eventsRouter); +router.use('/gigachat', gigachatRouter); diff --git a/server/routers/kfu-m-24-1/sberhubproject/users/data/users.json b/server/routers/kfu-m-24-1/sberhubproject/users/data/users.json index e4fe7c2..ef8fef8 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/users/data/users.json +++ b/server/routers/kfu-m-24-1/sberhubproject/users/data/users.json @@ -6,8 +6,8 @@ "about": "Разработчик с 10-летним стажем, увлекаюсь новыми технологиями.", "email": "ivan.ivanov@example.com", "interests": [ - { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" }, - { "value": "Музыка", "label": "Музыка" } + "Новые технологии, ИИ, техника", + "Музыка" ] }, { @@ -17,8 +17,8 @@ "about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.", "email": "maria.smirnova@example.com", "interests": [ - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" }, - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" } + "Путешествия и туризм", + "Искусство, фотография и дизайн" ] }, { @@ -28,8 +28,8 @@ "about": "Финансовый аналитик, интересуюсь инвестициями и рынками.", "email": "aleksey.kuznetsov@example.com", "interests": [ - { "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" }, - { "value": "Математика, физика и информатика", "label": "Математика, физика и информатика" } + "Политика, социология, активизм и дебаты", + "Математика, физика и информатика" ] }, { @@ -39,8 +39,8 @@ "about": "Дизайнер интерьеров, люблю создавать уютные и стильные пространства.", "email": "olga.petrovna@example.com", "interests": [ - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + "Искусство, фотография и дизайн", + "Кино и другое многомодальное искусство" ] }, { @@ -50,8 +50,8 @@ "about": "Тренер по фитнесу, придерживаюсь здорового образа жизни.", "email": "dmitriy.sidorov@example.com", "interests": [ - { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }, - { "value": "Волонтерство и благотворительность", "label": "Волонтерство и благотворительность" } + "Спорт, фитнес и ЗОЖ", + "Волонтерство и благотворительность" ] }, { @@ -61,8 +61,8 @@ "about": "Психолог, занимаюсь личностным ростом и развитием.", "email": "elena.volkova@example.com", "interests": [ - { "value": "Психология и психическое здоровье", "label": "Психология и психическое здоровье" }, - { "value": "Литература и история", "label": "Литература и история" } + "Психология и психическое здоровье", + "Литература и история" ] }, { @@ -72,8 +72,8 @@ "about": "Ведущий мероприятий и организатор, люблю работать с людьми.", "email": "artem.morozov@example.com", "interests": [ - { "value": "Настольные игры", "label": "Настольные игры" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + "Настольные игры", + "Кино и другое многомодальное искусство" ] }, { @@ -83,8 +83,8 @@ "about": "Веду блог о моде и стиле, увлекаюсь новыми трендами.", "email": "irina.fedorova@example.com", "interests": [ - { "value": "Мода", "label": "Мода" }, - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + "Мода", + "Путешествия и туризм" ] }, { @@ -94,8 +94,8 @@ "about": "Разработчик мобильных приложений, увлекаюсь игровыми технологиями.", "email": "sergey.chernov@example.com", "interests": [ - { "value": "Соревновательные видеоигры", "label": "Соревновательные видеоигры" }, - { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" } + "Соревновательные видеоигры", + "Новые технологии, ИИ, техника" ] }, { @@ -105,8 +105,8 @@ "about": "Работаю в области маркетинга, увлекаюсь продвижением брендов.", "email": "tatyana.lebedeva@example.com", "interests": [ - { "value": "Маркетинг", "label": "Маркетинг" }, - { "value": "Литература и история", "label": "Литература и история" } + "Маркетинг", + "Литература и история" ] }, { @@ -116,8 +116,8 @@ "about": "Инженер-программист, увлекаюсь разработкой игр и виртуальной реальностью.", "email": "andrey.vasilyev@example.com", "interests": [ - { "value": "Разработка игр", "label": "Разработка игр" }, - { "value": "Виртуальная реальность", "label": "Виртуальная реальность" } + "Разработка игр", + "Виртуальная реальность" ] }, { @@ -127,8 +127,8 @@ "about": "Преподаватель литературы, люблю поэзию и классическую литературу.", "email": "natalya.kozlova@example.com", "interests": [ - { "value": "Литература и история", "label": "Литература и история" }, - { "value": "Образование и наука", "label": "Образование и наука" } + "Литература и история", + "Образование и наука" ] }, { @@ -138,8 +138,8 @@ "about": "Спортсмен, занимаюсь бегом и триатлоном.", "email": "pavel.novikov@example.com", "interests": [ - { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }, - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + "Спорт, фитнес и ЗОЖ", + "Путешествия и туризм" ] }, { @@ -149,8 +149,8 @@ "about": "Архитектор, увлекаюсь современным дизайном и урбанистикой.", "email": "ekaterina.mikhailova@example.com", "interests": [ - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, - { "value": "Урбанистика", "label": "Урбанистика" } + "Искусство, фотография и дизайн", + "Урбанистика" ] }, { @@ -160,8 +160,8 @@ "about": "Бизнес-консультант, помогаю компаниям развиваться.", "email": "viktor.sokolov@example.com", "interests": [ - { "value": "Бизнес и предпринимательство", "label": "Бизнес и предпринимательство" }, - { "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" } + "Бизнес и предпринимательство", + "Политика, социология, активизм и дебаты" ] }, { @@ -171,8 +171,8 @@ "about": "Художник, работаю в стиле абстракционизма.", "email": "anna.pavlova@example.com", "interests": [ - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + "Искусство, фотография и дизайн", + "Кино и другое многомодальное искусство" ] }, { @@ -182,8 +182,8 @@ "about": "Ученый, занимаюсь исследованиями в области биотехнологий.", "email": "denis.ivanov@example.com", "interests": [ - { "value": "Биология и биотехнологии", "label": "Биология и биотехнологии" }, - { "value": "Образование и наука", "label": "Образование и наука" } + "Биология и биотехнологии", + "Образование и наука" ] }, { @@ -193,8 +193,8 @@ "about": "Повар, специализируюсь на авторской кухне.", "email": "lyudmila.kuznetsova@example.com", "interests": [ - { "value": "Кулинария", "label": "Кулинария" }, - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + "Кулинария", + "Путешествия и туризм" ] }, { @@ -204,8 +204,8 @@ "about": "Музыкант, играю на гитаре и пишу песни.", "email": "grigoriy.petrov@example.com", "interests": [ - { "value": "Музыка", "label": "Музыка" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + "Музыка", + "Кино и другое многомодальное искусство" ] }, { @@ -215,8 +215,8 @@ "about": "Врач, специализируюсь на профилактической медицине.", "email": "valentina.semenova@example.com", "interests": [ - { "value": "Медицина и здоровье", "label": "Медицина и здоровье" }, - { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" } + "Медицина и здоровье", + "Спорт, фитнес и ЗОЖ" ] }, { @@ -226,8 +226,8 @@ "about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.", "email": "maria.smirnova@example.com", "interests": [ - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" }, - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" } + "Путешествия и туризм", + "Искусство, фотография и дизайн" ] } ] \ No newline at end of file