Merge branch 'master' into kfu-m-24-1/eng-it-lean

This commit is contained in:
Ruslan Zagitov
2025-02-05 19:25:39 +03:00
31 changed files with 1228 additions and 340 deletions

View File

@@ -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,

View File

@@ -27,10 +27,12 @@ router.post('/:user_id/:action/:id', (req, res) => {
const user_id = parseInt(req.params.user_id);
const id = parseInt(req.params.id);
const action = req.params.action;
/*
if (users_data.findIndex((item) => item.id === user_id) === -1 || data.findIndex((item) => item.id === id) === -1) {
res.status(404).send();
return;
}
*/
if (action !== 'participate' && action !== 'refuse') {
res.status(400).send({ error: 'Invalid action' });
return;

View File

@@ -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();

View File

@@ -0,0 +1,6 @@
const router = require('express').Router();
const controller = require('./controller');
router.post('/', controller.getText);
module.exports = router;

View File

@@ -2,8 +2,19 @@ const router = require('express').Router();
const interestsRouter = require('./interests');
const usersRouter = require('./users');
const eventsRouter = require('./events');
const gigachatRouter = require('./gigachat');
const telegramRouter = require('./telegram');
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);
router.use('/telegram', telegramRouter);

View File

@@ -1,19 +1,19 @@
[
{"value":"Стартапы, поиск команды и нетворкинг", "label":"Стартапы, поиск команды и нетворкинг"},
{"value":"Искусство, фотография и дизайн", "label":"Искусство, фотография и дизайн"},
{"value":"Музыка", "label":"Музыка"},
{"value":"Хореография", "label":"Хореография"},
{"value":"Спорт, фитнес и ЗОЖ", "label":"Спорт, фитнес и ЗОЖ"},
{"value":"Литература и история", "label":"Литература и история"},
{"value":"Политика, социология, активизм и дебаты", "label":"Политика, социология, активизм и дебаты"},
{"value":"Кино и другое многомодальное искусство", "label":"Кино и другое многомодальное искусство"},
{"value":"Психология и психическое здоровье", "label":"Психология и психическое здоровье"},
{"value":"Соревновательные видеоигры", "label":"Соревновательные видеоигры"},
{"value":"Новые технологии, ИИ, техника", "label":"Новые технологии, ИИ, техника"},
{"value":"Математика, физика и информатика", "label":"Математика, физика и информатика"},
{"value" :"Волонтерство и благотворительность", "label": "Волонтерство и благотворительность"},
{"value" :"Настольные игры", "label": "Настольные игры"},
{"value" :"Путешествия и туризм", "label": "Путешествия и туризм"},
{"value" :"Английский (иностранные языки)", "label": "Английский (иностранные языки)"},
{"value" :"Цифровые кафедры", "label": "Цифровые кафедры"}
"Стартапы, поиск команды и нетворкинг",
"Искусство, фотография и дизайн",
"Музыка",
"Хореография",
"Спорт, фитнес и ЗОЖ",
"Литература и история",
"Политика, социология, активизм и дебаты",
"Кино и другое многомодальное искусство",
"Психология и психическое здоровье",
"Соревновательные видеоигры",
"Новые технологии, ИИ, техника",
"Математика, физика и информатика",
"Волонтерство и благотворительность",
"Настольные игры",
"Путешествия и туризм",
"Английский (иностранные языки)",
"Цифровые кафедры"
]

View File

@@ -0,0 +1,24 @@
const axios = require('axios');
process.env.TELEGRAM_TOKEN = '7866617284:AAHDOfPQJdKmufOdRgFza6XA8ZWRHPeA_Yc';
class controller {
async sendMessage(req, res) {
try {
const { chat_id, text } = req.body;
const response = await axios.get(`https://api.telegram.org/bot${process.env.TELEGRAM_TOKEN}/sendMessage`, {
params: {
chat_id: chat_id,
text: text,
parse_mode: 'html'
}
});
res.json(response.data);
} catch (e) {
res.status(400).json({ message: e.message });
}
}
}
module.exports = new controller();

View File

@@ -0,0 +1,6 @@
const router = require('express').Router();
const controller = require('./controller');
router.post('/', controller.sendMessage);
module.exports = router;

View File

@@ -6,8 +6,19 @@
"about": "Разработчик с 10-летним стажем, увлекаюсь новыми технологиями.",
"email": "ivan.ivanov@example.com",
"interests": [
{ "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" },
{ "value": "Музыка", "label": "Музыка" }
"Новые технологии, ИИ, техника",
"Музыка"
]
},
{
"id": 1252744945,
"username": "Моряков Сергей",
"photo": "",
"about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.",
"email": "sergey.moryakov@example.com",
"interests": [
"Путешествия и туризм",
"Искусство, фотография и дизайн"
]
},
{
@@ -17,8 +28,8 @@
"about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.",
"email": "maria.smirnova@example.com",
"interests": [
{ "value": "Путешествия и туризм", "label": "Путешествия и туризм" },
{ "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }
"Путешествия и туризм",
"Искусство, фотография и дизайн"
]
},
{
@@ -28,8 +39,8 @@
"about": "Финансовый аналитик, интересуюсь инвестициями и рынками.",
"email": "aleksey.kuznetsov@example.com",
"interests": [
{ "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" },
{ "value": "Математика, физика и информатика", "label": "Математика, физика и информатика" }
"Политика, социология, активизм и дебаты",
"Математика, физика и информатика"
]
},
{
@@ -39,8 +50,8 @@
"about": "Дизайнер интерьеров, люблю создавать уютные и стильные пространства.",
"email": "olga.petrovna@example.com",
"interests": [
{ "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" },
{ "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" }
"Искусство, фотография и дизайн",
"Кино и другое многомодальное искусство"
]
},
{
@@ -50,8 +61,8 @@
"about": "Тренер по фитнесу, придерживаюсь здорового образа жизни.",
"email": "dmitriy.sidorov@example.com",
"interests": [
{ "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" },
{ "value": "Волонтерство и благотворительность", "label": "Волонтерство и благотворительность" }
"Спорт, фитнес и ЗОЖ",
"Волонтерство и благотворительность"
]
},
{
@@ -61,8 +72,8 @@
"about": "Психолог, занимаюсь личностным ростом и развитием.",
"email": "elena.volkova@example.com",
"interests": [
{ "value": "Психология и психическое здоровье", "label": "Психология и психическое здоровье" },
{ "value": "Литература и история", "label": "Литература и история" }
"Психология и психическое здоровье",
"Литература и история"
]
},
{
@@ -72,8 +83,8 @@
"about": "Ведущий мероприятий и организатор, люблю работать с людьми.",
"email": "artem.morozov@example.com",
"interests": [
{ "value": "Настольные игры", "label": "Настольные игры" },
{ "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" }
"Настольные игры",
"Кино и другое многомодальное искусство"
]
},
{
@@ -83,8 +94,8 @@
"about": "Веду блог о моде и стиле, увлекаюсь новыми трендами.",
"email": "irina.fedorova@example.com",
"interests": [
{ "value": "Мода", "label": "Мода" },
{ "value": "Путешествия и туризм", "label": "Путешествия и туризм" }
"Мода",
"Путешествия и туризм"
]
},
{
@@ -94,8 +105,8 @@
"about": "Разработчик мобильных приложений, увлекаюсь игровыми технологиями.",
"email": "sergey.chernov@example.com",
"interests": [
{ "value": "Соревновательные видеоигры", "label": "Соревновательные видеоигры" },
{ "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" }
"Соревновательные видеоигры",
"Новые технологии, ИИ, техника"
]
},
{
@@ -105,8 +116,8 @@
"about": "Работаю в области маркетинга, увлекаюсь продвижением брендов.",
"email": "tatyana.lebedeva@example.com",
"interests": [
{ "value": "Маркетинг", "label": "Маркетинг" },
{ "value": "Литература и история", "label": "Литература и история" }
"Маркетинг",
"Литература и история"
]
},
{
@@ -116,8 +127,8 @@
"about": "Инженер-программист, увлекаюсь разработкой игр и виртуальной реальностью.",
"email": "andrey.vasilyev@example.com",
"interests": [
{ "value": "Разработка игр", "label": "Разработка игр" },
{ "value": "Виртуальная реальность", "label": "Виртуальная реальность" }
"Разработка игр",
"Виртуальная реальность"
]
},
{
@@ -127,8 +138,8 @@
"about": "Преподаватель литературы, люблю поэзию и классическую литературу.",
"email": "natalya.kozlova@example.com",
"interests": [
{ "value": "Литература и история", "label": "Литература и история" },
{ "value": "Образование и наука", "label": "Образование и наука" }
"Литература и история",
"Образование и наука"
]
},
{
@@ -138,8 +149,8 @@
"about": "Спортсмен, занимаюсь бегом и триатлоном.",
"email": "pavel.novikov@example.com",
"interests": [
{ "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" },
{ "value": "Путешествия и туризм", "label": "Путешествия и туризм" }
"Спорт, фитнес и ЗОЖ",
"Путешествия и туризм"
]
},
{
@@ -149,8 +160,8 @@
"about": "Архитектор, увлекаюсь современным дизайном и урбанистикой.",
"email": "ekaterina.mikhailova@example.com",
"interests": [
{ "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" },
{ "value": "Урбанистика", "label": "Урбанистика" }
"Искусство, фотография и дизайн",
"Урбанистика"
]
},
{
@@ -160,8 +171,8 @@
"about": "Бизнес-консультант, помогаю компаниям развиваться.",
"email": "viktor.sokolov@example.com",
"interests": [
{ "value": "Бизнес и предпринимательство", "label": "Бизнес и предпринимательство" },
{ "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" }
"Бизнес и предпринимательство",
"Политика, социология, активизм и дебаты"
]
},
{
@@ -171,8 +182,8 @@
"about": "Художник, работаю в стиле абстракционизма.",
"email": "anna.pavlova@example.com",
"interests": [
{ "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" },
{ "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" }
"Искусство, фотография и дизайн",
"Кино и другое многомодальное искусство"
]
},
{
@@ -182,8 +193,8 @@
"about": "Ученый, занимаюсь исследованиями в области биотехнологий.",
"email": "denis.ivanov@example.com",
"interests": [
{ "value": "Биология и биотехнологии", "label": "Биология и биотехнологии" },
{ "value": "Образование и наука", "label": "Образование и наука" }
"Биология и биотехнологии",
"Образование и наука"
]
},
{
@@ -193,8 +204,8 @@
"about": "Повар, специализируюсь на авторской кухне.",
"email": "lyudmila.kuznetsova@example.com",
"interests": [
{ "value": "Кулинария", "label": "Кулинария" },
{ "value": "Путешествия и туризм", "label": "Путешествия и туризм" }
"Кулинария",
"Путешествия и туризм"
]
},
{
@@ -204,8 +215,8 @@
"about": "Музыкант, играю на гитаре и пишу песни.",
"email": "grigoriy.petrov@example.com",
"interests": [
{ "value": "Музыка", "label": "Музыка" },
{ "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" }
"Музыка",
"Кино и другое многомодальное искусство"
]
},
{
@@ -215,19 +226,8 @@
"about": "Врач, специализируюсь на профилактической медицине.",
"email": "valentina.semenova@example.com",
"interests": [
{ "value": "Медицина и здоровье", "label": "Медицина и здоровье" },
{ "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }
]
},
{
"id": 1252744945,
"username": "Моряков Сергей",
"photo": "https://i.pravatar.cc/150?img=50",
"about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.",
"email": "maria.smirnova@example.com",
"interests": [
{ "value": "Путешествия и туризм", "label": "Путешествия и туризм" },
{ "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }
"Медицина и здоровье",
"Спорт, фитнес и ЗОЖ"
]
}
]

View File

@@ -27,10 +27,12 @@ router.post('/:to_id/:action/:from_id', (req, res) => {
const to_id = parseInt(req.params.to_id);
const from_id = parseInt(req.params.from_id);
const action = req.params.action;
/*
if (data.findIndex((item) => item.id === to_id) === -1 || data.findIndex((item) => item.id === from_id) === -1) {
res.status(404).send();
return;
}
*/
if (action !== 'like' && action !== 'dislike') {
res.status(400).send({ error: 'Invalid action' });
return;