From 367c0de6fb2cd3f402e7dff4e869b2bb4661f65b Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 29 Jan 2025 15:50:53 +0300 Subject: [PATCH] [feat][refactor] add events and edit users --- .../sberhubproject/events/data/event.json | 602 ++++++++++++++++++ .../kfu-m-24-1/sberhubproject/events/index.js | 40 ++ .../kfu-m-24-1/sberhubproject/index.js | 5 +- .../sberhubproject/interests/index.js | 7 +- .../sberhubproject/users/data/users.json | 344 ++++++---- .../kfu-m-24-1/sberhubproject/users/index.js | 51 +- 6 files changed, 908 insertions(+), 141 deletions(-) create mode 100644 server/routers/kfu-m-24-1/sberhubproject/events/data/event.json create mode 100644 server/routers/kfu-m-24-1/sberhubproject/events/index.js 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 new file mode 100644 index 0000000..0d50f1c --- /dev/null +++ b/server/routers/kfu-m-24-1/sberhubproject/events/data/event.json @@ -0,0 +1,602 @@ +[ + { + "id": 1, + "name": "Конференция 2025", + "description": "Ежегодная конференция по технологиям", + "date": "2025-03-15T10:00:00Z" + }, + { + "id": 2, + "name": "Командная встреча", + "description": "Ежеквартальная встреча для согласования целей", + "date": 1672444800000 + }, + { + "id": 3, + "name": "День рождения", + "description": "Празднование 30-летия Ивана", + "date": "2025-01-25" + }, + { + "id": 4, + "name": "Вебинар", + "description": "Онлайн-вебинар по лучшим практикам TypeScript", + "date": "2025-02-10T14:30:00Z" + }, + { + "id": 5, + "name": "Митап разработчиков", + "description": "Встреча разработчиков для обмена опытом", + "date": "2025-04-05T18:00:00Z" + }, + { + "id": 6, + "name": "Хакатон", + "description": "48-часовой марафон программирования", + "date": "2025-05-20T09:00:00Z" + }, + { + "id": 7, + "name": "Обучение Agile", + "description": "Тренинг по методологии Agile", + "date": "2025-06-10T10:00:00Z" + }, + { + "id": 8, + "name": "Презентация продукта", + "description": "Анонс нового продукта компании", + "date": "2025-07-01T14:00:00Z" + }, + { + "id": 9, + "name": "Корпоратив", + "description": "Ежегодный корпоративный праздник", + "date": "2025-08-15T19:00:00Z" + }, + { + "id": 10, + "name": "Обучение DevOps", + "description": "Курс по основам DevOps", + "date": "2025-09-05T09:00:00Z" + }, + { + "id": 11, + "name": "Встреча с клиентом", + "description": "Обсуждение нового проекта", + "date": "2025-10-12T11:00:00Z" + }, + { + "id": 12, + "name": "Технический семинар", + "description": "Семинар по новым технологиям", + "date": "2025-11-20T13:00:00Z" + }, + { + "id": 13, + "name": "Рождественская вечеринка", + "description": "Празднование Рождества", + "date": "2025-12-24T20:00:00Z" + }, + { + "id": 14, + "name": "Планирование года", + "description": "Стратегическое планирование на следующий год", + "date": "2026-01-10T09:00:00Z" + }, + { + "id": 15, + "name": "Обучение Python", + "description": "Курс для начинающих", + "date": "2026-02-15T10:00:00Z" + }, + { + "id": 16, + "name": "Встреча инвесторов", + "description": "Презентация финансовых результатов", + "date": "2026-03-01T15:00:00Z" + }, + { + "id": 17, + "name": "Марафон кодирования", + "description": "24-часовой марафон", + "date": "2026-04-05T12:00:00Z" + }, + { + "id": 18, + "name": "Обучение React", + "description": "Продвинутый курс по React", + "date": "2026-05-10T14:00:00Z" + }, + { + "id": 19, + "name": "Конференция AI", + "description": "Конференция по искусственному интеллекту", + "date": "2026-06-15T09:00:00Z" + }, + { + "id": 20, + "name": "День открытых дверей", + "description": "Знакомство с компанией", + "date": "2026-07-01T10:00:00Z" + }, + { + "id": 21, + "name": "Обучение Docker", + "description": "Курс по контейнеризации", + "date": "2026-08-10T11:00:00Z" + }, + { + "id": 22, + "name": "Встреча с партнерами", + "description": "Обсуждение сотрудничества", + "date": "2026-09-05T13:00:00Z" + }, + { + "id": 23, + "name": "Технический митап", + "description": "Обсуждение новых технологий", + "date": "2026-10-12T18:00:00Z" + }, + { + "id": 24, + "name": "Хэллоуин", + "description": "Корпоративная вечеринка", + "date": "2026-10-31T20:00:00Z" + }, + { + "id": 25, + "name": "Обучение Kubernetes", + "description": "Курс по оркестрации контейнеров", + "date": "2026-11-15T09:00:00Z" + }, + { + "id": 26, + "name": "Встреча команды", + "description": "Обсуждение текущих задач", + "date": "2026-12-01T10:00:00Z" + }, + { + "id": 27, + "name": "Новогодний корпоратив", + "description": "Празднование Нового года", + "date": "2026-12-31T21:00:00Z" + }, + { + "id": 28, + "name": "Обучение GraphQL", + "description": "Курс по GraphQL", + "date": "2027-01-10T14:00:00Z" + }, + { + "id": 29, + "name": "Конференция Blockchain", + "description": "Конференция по блокчейн-технологиям", + "date": "2027-02-15T09:00:00Z" + }, + { + "id": 30, + "name": "Встреча с заказчиком", + "description": "Обсуждение требований", + "date": "2027-03-01T11:00:00Z" + }, + { + "id": 31, + "name": "Обучение Node.js", + "description": "Курс по серверному JavaScript", + "date": "2027-04-05T10:00:00Z" + }, + { + "id": 32, + "name": "Митап по DevOps", + "description": "Обсуждение лучших практик", + "date": "2027-05-10T18:00:00Z" + }, + { + "id": 33, + "name": "Конференция Cloud", + "description": "Конференция по облачным технологиям", + "date": "2027-06-15T09:00:00Z" + }, + { + "id": 34, + "name": "Обучение Security", + "description": "Курс по кибербезопасности", + "date": "2027-07-01T14:00:00Z" + }, + { + "id": 35, + "name": "Встреча с командой", + "description": "Планирование спринта", + "date": "2027-08-10T10:00:00Z" + }, + { + "id": 36, + "name": "Обучение AWS", + "description": "Курс по Amazon Web Services", + "date": "2027-09-05T11:00:00Z" + }, + { + "id": 37, + "name": "Конференция Big Data", + "description": "Конференция по большим данным", + "date": "2027-10-12T09:00:00Z" + }, + { + "id": 38, + "name": "Обучение Machine Learning", + "description": "Курс по машинному обучению", + "date": "2027-11-15T14:00:00Z" + }, + { + "id": 39, + "name": "Встреча с инвесторами", + "description": "Презентация новых проектов", + "date": "2027-12-01T15:00:00Z" + }, + { + "id": 40, + "name": "Новогодний митап", + "description": "Подведение итогов года", + "date": "2027-12-31T20:00:00Z" + }, + { + "id": 41, + "name": "Обучение Go", + "description": "Курс по языку Go", + "date": "2028-01-10T10:00:00Z" + }, + { + "id": 42, + "name": "Конференция IoT", + "description": "Конференция по интернету вещей", + "date": "2028-02-15T09:00:00Z" + }, + { + "id": 43, + "name": "Встреча с партнерами", + "description": "Обсуждение новых инициатив", + "date": "2028-03-01T11:00:00Z" + }, + { + "id": 44, + "name": "Обучение Rust", + "description": "Курс по языку Rust", + "date": "2028-04-05T14:00:00Z" + }, + { + "id": 45, + "name": "Митап по AI", + "description": "Обсуждение трендов в AI", + "date": "2028-05-10T18:00:00Z" + }, + { + "id": 46, + "name": "Конференция Cybersecurity", + "description": "Конференция по кибербезопасности", + "date": "2028-06-15T09:00:00Z" + }, + { + "id": 47, + "name": "Обучение Vue.js", + "description": "Курс по фреймворку Vue.js", + "date": "2028-07-01T10:00:00Z" + }, + { + "id": 48, + "name": "Встреча команды", + "description": "Обсуждение текущих проектов", + "date": "2028-08-10T11:00:00Z" + }, + { + "id": 49, + "name": "Обучение Angular", + "description": "Курс по фреймворку Angular", + "date": "2028-09-05T14:00:00Z" + }, + { + "id": 50, + "name": "Конференция DevOps", + "description": "Конференция по DevOps", + "date": "2028-10-12T09:00:00Z" + }, + { + "id": 51, + "name": "Обучение SQL", + "description": "Курс по базам данных", + "date": "2028-11-15T10:00:00Z" + }, + { + "id": 52, + "name": "Встреча с клиентом", + "description": "Обсуждение новых требований", + "date": "2028-12-01T11:00:00Z" + }, + { + "id": 53, + "name": "Новогодний корпоратив", + "description": "Празднование Нового года", + "date": "2028-12-31T21:00:00Z" + }, + { + "id": 54, + "name": "Обучение NoSQL", + "description": "Курс по NoSQL базам данных", + "date": "2029-01-10T14:00:00Z" + }, + { + "id": 55, + "name": "Конференция Frontend", + "description": "Конференция по фронтенд-разработке", + "date": "2029-02-15T09:00:00Z" + }, + { + "id": 56, + "name": "Встреча с командой", + "description": "Планирование задач", + "date": "2029-03-01T10:00:00Z" + }, + { + "id": 57, + "name": "Обучение Svelte", + "description": "Курс по фреймворку Svelte", + "date": "2029-04-05T11:00:00Z" + }, + { + "id": 58, + "name": "Митап по Backend", + "description": "Обсуждение backend-разработки", + "date": "2029-05-10T18:00:00Z" + }, + { + "id": 59, + "name": "Конференция Mobile", + "description": "Конференция по мобильной разработке", + "date": "2029-06-15T09:00:00Z" + }, + { + "id": 60, + "name": "Обучение Flutter", + "description": "Курс по Flutter", + "date": "2029-07-01T10:00:00Z" + }, + { + "id": 61, + "name": "Встреча с партнерами", + "description": "Обсуждение новых проектов", + "date": "2029-08-10T11:00:00Z" + }, + { + "id": 62, + "name": "Обучение Kotlin", + "description": "Курс по языку Kotlin", + "date": "2029-09-05T14:00:00Z" + }, + { + "id": 63, + "name": "Конференция GameDev", + "description": "Конференция по разработке игр", + "date": "2029-10-12T09:00:00Z" + }, + { + "id": 64, + "name": "Обучение Unity", + "description": "Курс по Unity", + "date": "2029-11-15T10:00:00Z" + }, + { + "id": 65, + "name": "Встреча с клиентом", + "description": "Обсуждение фидбэка", + "date": "2029-12-01T11:00:00Z" + }, + { + "id": 66, + "name": "Новогодний митап", + "description": "Подведение итогов года", + "date": "2029-12-31T20:00:00Z" + }, + { + "id": 67, + "name": "Обучение Swift", + "description": "Курс по языку Swift", + "date": "2030-01-10T14:00:00Z" + }, + { + "id": 68, + "name": "Конференция AR/VR", + "description": "Конференция по AR/VR технологиям", + "date": "2030-02-15T09:00:00Z" + }, + { + "id": 69, + "name": "Встреча команды", + "description": "Обсуждение текущих задач", + "date": "2030-03-01T10:00:00Z" + }, + { + "id": 70, + "name": "Обучение Dart", + "description": "Курс по языку Dart", + "date": "2030-04-05T11:00:00Z" + }, + { + "id": 71, + "name": "Митап по Mobile", + "description": "Обсуждение мобильной разработки", + "date": "2030-05-10T18:00:00Z" + }, + { + "id": 72, + "name": "Конференция QA", + "description": "Конференция по тестированию", + "date": "2030-06-15T09:00:00Z" + }, + { + "id": 73, + "name": "Обучение Selenium", + "description": "Курс по автоматизации тестирования", + "date": "2030-07-01T10:00:00Z" + }, + { + "id": 74, + "name": "Встреча с партнерами", + "description": "Обсуждение сотрудничества", + "date": "2030-08-10T11:00:00Z" + }, + { + "id": 75, + "name": "Обучение Jenkins", + "description": "Курс по CI/CD", + "date": "2030-09-05T14:00:00Z" + }, + { + "id": 76, + "name": "Конференция Automation", + "description": "Конференция по автоматизации", + "date": "2030-10-12T09:00:00Z" + }, + { + "id": 77, + "name": "Обучение Git", + "description": "Курс по системе контроля версий", + "date": "2030-11-15T10:00:00Z" + }, + { + "id": 78, + "name": "Встреча с клиентом", + "description": "Обсуждение новых требований", + "date": "2030-12-01T11:00:00Z" + }, + { + "id": 79, + "name": "Новогодний корпоратив", + "description": "Празднование Нового года", + "date": "2030-12-31T21:00:00Z" + }, + { + "id": 80, + "name": "Обучение Linux", + "description": "Курс по операционной системе Linux", + "date": "2031-01-10T14:00:00Z" + }, + { + "id": 81, + "name": "Конференция Open Source", + "description": "Конференция по открытому ПО", + "date": "2031-02-15T09:00:00Z" + }, + { + "id": 82, + "name": "Встреча команды", + "description": "Планирование задач", + "date": "2031-03-01T10:00:00Z" + }, + { + "id": 83, + "name": "Обучение Bash", + "description": "Курс по скриптингу", + "date": "2031-04-05T11:00:00Z" + }, + { + "id": 84, + "name": "Митап по DevOps", + "description": "Обсуждение лучших практик", + "date": "2031-05-10T18:00:00Z" + }, + { + "id": 85, + "name": "Конференция Cloud Native", + "description": "Конференция по облачным технологиям", + "date": "2031-06-15T09:00:00Z" + }, + { + "id": 86, + "name": "Обучение Terraform", + "description": "Курс по инфраструктуре как код", + "date": "2031-07-01T10:00:00Z" + }, + { + "id": 87, + "name": "Встреча с партнерами", + "description": "Обсуждение новых проектов", + "date": "2031-08-10T11:00:00Z" + }, + { + "id": 88, + "name": "Обучение Ansible", + "description": "Курс по автоматизации", + "date": "2031-09-05T14:00:00Z" + }, + { + "id": 89, + "name": "Конференция Microservices", + "description": "Конференция по микросервисам", + "date": "2031-10-12T09:00:00Z" + }, + { + "id": 90, + "name": "Обучение Kafka", + "description": "Курс по потоковой обработке данных", + "date": "2031-11-15T10:00:00Z" + }, + { + "id": 91, + "name": "Встреча с клиентом", + "description": "Обсуждение фидбэка", + "date": "2031-12-01T11:00:00Z" + }, + { + "id": 92, + "name": "Новогодний митап", + "description": "Подведение итогов года", + "date": "2031-12-31T20:00:00Z" + }, + { + "id": 93, + "name": "Обучение Prometheus", + "description": "Курс по мониторингу", + "date": "2032-01-10T14:00:00Z" + }, + { + "id": 94, + "name": "Конференция Monitoring", + "description": "Конференция по мониторингу", + "date": "2032-02-15T09:00:00Z" + }, + { + "id": 95, + "name": "Встреча команды", + "description": "Обсуждение текущих задач", + "date": "2032-03-01T10:00:00Z" + }, + { + "id": 96, + "name": "Обучение Grafana", + "description": "Курс по визуализации данных", + "date": "2032-04-05T11:00:00Z" + }, + { + "id": 97, + "name": "Митап по SRE", + "description": "Обсуждение Site Reliability Engineering", + "date": "2032-05-10T18:00:00Z" + }, + { + "id": 98, + "name": "Конференция Infrastructure", + "description": "Конференция по инфраструктуре", + "date": "2032-06-15T09:00:00Z" + }, + { + "id": 99, + "name": "Обучение ELK", + "description": "Курс по Elasticsearch, Logstash, Kibana", + "date": "2032-07-01T10:00:00Z" + }, + { + "id": 100, + "name": "Встреча с партнерами", + "description": "Обсуждение сотрудничества", + "date": "2032-08-10T11:00:00Z" + } +] \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sberhubproject/events/index.js b/server/routers/kfu-m-24-1/sberhubproject/events/index.js new file mode 100644 index 0000000..ecc196e --- /dev/null +++ b/server/routers/kfu-m-24-1/sberhubproject/events/index.js @@ -0,0 +1,40 @@ +const router = require('express').Router(); + +module.exports = router; + +const data = require('./data/event.json'); +const users_data = require('../users/data/users.json'); + +router.get('/', (req, res) => { + res.json(data); +}); + +router.get('/:pageSize/:page', (req, res) => { + const pageSize = parseInt(req.params.pageSize); + const page = parseInt(req.params.page); + res.json(data.slice(pageSize * (page - 1), pageSize * page)); +}); + +router.post('/', (req, res) => { + res.status(201).send(); +}); + +router.delete('/:id', (req, res) => { + res.status(204).send(); +}); + +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; + } + + res.status(201).send({ message: `${action} action processed` }); +}); diff --git a/server/routers/kfu-m-24-1/sberhubproject/index.js b/server/routers/kfu-m-24-1/sberhubproject/index.js index 586590a..70d6de8 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/index.js +++ b/server/routers/kfu-m-24-1/sberhubproject/index.js @@ -1,17 +1,16 @@ const router = require('express').Router(); const interestsRouter = require('./interests'); const usersRouter = require('./users'); +const eventsRouter = require('./events'); 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('/users/:id', usersRouter); \ No newline at end of file +router.use('/events', eventsRouter); diff --git a/server/routers/kfu-m-24-1/sberhubproject/interests/index.js b/server/routers/kfu-m-24-1/sberhubproject/interests/index.js index f9a226d..aac946d 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/interests/index.js +++ b/server/routers/kfu-m-24-1/sberhubproject/interests/index.js @@ -5,8 +5,5 @@ module.exports = router; const data = require('./data/interest.json'); router.get('/', (req, res) => { - //res.status(500).send({ - // message: 'Internal server error' - //}); - res.json(data) -}); \ No newline at end of file + res.json(data); +}); 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 378fbf4..e4fe7c2 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 @@ -1,113 +1,233 @@ [ - { - "id": 1252744945, - "username": "Иван Иванов", - "photo": "https://example.com/photos/1.jpg", - "about": "Разработчик с 10-летним стажем, увлекаюсь новыми технологиями.", - "email": "ivan.ivanov@example.com", - "interests": [ - { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" }, - { "value": "Музыка", "label": "Музыка" } - ] - }, - { - "id": 2, - "username": "Мария Смирнова", - "photo": "https://example.com/photos/2.jpg", - "about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.", - "email": "maria.smirnova@example.com", - "interests": [ - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" }, - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" } - ] - }, - { - "id": 3, - "username": "Алексей Кузнецов", - "photo": "https://example.com/photos/3.jpg", - "about": "Финансовый аналитик, интересуюсь инвестициями и рынками.", - "email": "aleksey.kuznetsov@example.com", - "interests": [ - { "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" }, - { "value": "Математика, физика и информатика", "label": "Математика, физика и информатика" } - ] - }, - { - "id": 4, - "username": "Ольга Петрова", - "photo": "https://example.com/photos/4.jpg", - "about": "Дизайнер интерьеров, люблю создавать уютные и стильные пространства.", - "email": "olga.petrovna@example.com", - "interests": [ - { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } - ] - }, - { - "id": 5, - "username": "Дмитрий Сидоров", - "photo": "https://example.com/photos/5.jpg", - "about": "Тренер по фитнесу, придерживаюсь здорового образа жизни.", - "email": "dmitriy.sidorov@example.com", - "interests": [ - { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }, - { "value": "Волонтерство и благотворительность", "label": "Волонтерство и благотворительность" } - ] - }, - { - "id": 6, - "username": "Елена Волкова", - "photo": "https://example.com/photos/6.jpg", - "about": "Психолог, занимаюсь личностным ростом и развитием.", - "email": "elena.volkova@example.com", - "interests": [ - { "value": "Психология и психическое здоровье", "label": "Психология и психическое здоровье" }, - { "value": "Литература и история", "label": "Литература и история" } - ] - }, - { - "id": 7, - "username": "Артем Морозов", - "photo": "https://example.com/photos/7.jpg", - "about": "Ведущий мероприятий и организатор, люблю работать с людьми.", - "email": "artem.morozov@example.com", - "interests": [ - { "value": "Настольные игры", "label": "Настольные игры" }, - { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } - ] - }, - { - "id": 8, - "username": "Ирина Фёдорова", - "photo": "https://example.com/photos/8.jpg", - "about": "Веду блог о моде и стиле, увлекаюсь новыми трендами.", - "email": "irina.fedorova@example.com", - "interests": [ - { "value": "Мода", "label": "Мода" }, - { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } - ] - }, - { - "id": 9, - "username": "Сергей Чернов", - "photo": "https://example.com/photos/9.jpg", - "about": "Разработчик мобильных приложений, увлекаюсь игровыми технологиями.", - "email": "sergey.chernov@example.com", - "interests": [ - { "value": "Соревновательные видеоигры", "label": "Соревновательные видеоигры" }, - { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" } - ] - }, - { - "id": 10, - "username": "Татьяна Лебедева", - "photo": "https://example.com/photos/10.jpg", - "about": "Работаю в области маркетинга, увлекаюсь продвижением брендов.", - "email": "tatyana.lebedeva@example.com", - "interests": [ - { "value": "Маркетинг", "label": "Маркетинг" }, - { "value": "Литература и история", "label": "Литература и история" } - ] - } - ] - \ No newline at end of file + { + "id": 1, + "username": "Иван Иванов", + "photo": "https://i.pravatar.cc/150?img=64", + "about": "Разработчик с 10-летним стажем, увлекаюсь новыми технологиями.", + "email": "ivan.ivanov@example.com", + "interests": [ + { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" }, + { "value": "Музыка", "label": "Музыка" } + ] + }, + { + "id": 2, + "username": "Мария Смирнова", + "photo": "https://i.pravatar.cc/150?img=47", + "about": "Люблю путешествия и фотографию, обожаю изучать новые культуры.", + "email": "maria.smirnova@example.com", + "interests": [ + { "value": "Путешествия и туризм", "label": "Путешествия и туризм" }, + { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" } + ] + }, + { + "id": 3, + "username": "Алексей Кузнецов", + "photo": "https://i.pravatar.cc/150?img=68", + "about": "Финансовый аналитик, интересуюсь инвестициями и рынками.", + "email": "aleksey.kuznetsov@example.com", + "interests": [ + { "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" }, + { "value": "Математика, физика и информатика", "label": "Математика, физика и информатика" } + ] + }, + { + "id": 4, + "username": "Ольга Петрова", + "photo": "https://i.pravatar.cc/150?img=49", + "about": "Дизайнер интерьеров, люблю создавать уютные и стильные пространства.", + "email": "olga.petrovna@example.com", + "interests": [ + { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, + { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + ] + }, + { + "id": 5, + "username": "Дмитрий Сидоров", + "photo": "https://i.pravatar.cc/150?img=60", + "about": "Тренер по фитнесу, придерживаюсь здорового образа жизни.", + "email": "dmitriy.sidorov@example.com", + "interests": [ + { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }, + { "value": "Волонтерство и благотворительность", "label": "Волонтерство и благотворительность" } + ] + }, + { + "id": 6, + "username": "Елена Волкова", + "photo": "https://i.pravatar.cc/150?img=42", + "about": "Психолог, занимаюсь личностным ростом и развитием.", + "email": "elena.volkova@example.com", + "interests": [ + { "value": "Психология и психическое здоровье", "label": "Психология и психическое здоровье" }, + { "value": "Литература и история", "label": "Литература и история" } + ] + }, + { + "id": 7, + "username": "Артем Морозов", + "photo": "https://i.pravatar.cc/150?img=69", + "about": "Ведущий мероприятий и организатор, люблю работать с людьми.", + "email": "artem.morozov@example.com", + "interests": [ + { "value": "Настольные игры", "label": "Настольные игры" }, + { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + ] + }, + { + "id": 8, + "username": "Ирина Фёдорова", + "photo": "https://i.pravatar.cc/150?img=48", + "about": "Веду блог о моде и стиле, увлекаюсь новыми трендами.", + "email": "irina.fedorova@example.com", + "interests": [ + { "value": "Мода", "label": "Мода" }, + { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + ] + }, + { + "id": 9, + "username": "Сергей Чернов", + "photo": "https://i.pravatar.cc/150?img=65", + "about": "Разработчик мобильных приложений, увлекаюсь игровыми технологиями.", + "email": "sergey.chernov@example.com", + "interests": [ + { "value": "Соревновательные видеоигры", "label": "Соревновательные видеоигры" }, + { "value": "Новые технологии, ИИ, техника", "label": "Новые технологии, ИИ, техника" } + ] + }, + { + "id": 10, + "username": "Татьяна Лебедева", + "photo": "https://i.pravatar.cc/150?img=50", + "about": "Работаю в области маркетинга, увлекаюсь продвижением брендов.", + "email": "tatyana.lebedeva@example.com", + "interests": [ + { "value": "Маркетинг", "label": "Маркетинг" }, + { "value": "Литература и история", "label": "Литература и история" } + ] + }, + { + "id": 11, + "username": "Андрей Васильев", + "photo": "https://i.pravatar.cc/150?img=70", + "about": "Инженер-программист, увлекаюсь разработкой игр и виртуальной реальностью.", + "email": "andrey.vasilyev@example.com", + "interests": [ + { "value": "Разработка игр", "label": "Разработка игр" }, + { "value": "Виртуальная реальность", "label": "Виртуальная реальность" } + ] + }, + { + "id": 12, + "username": "Наталья Козлова", + "photo": "https://i.pravatar.cc/150?img=51", + "about": "Преподаватель литературы, люблю поэзию и классическую литературу.", + "email": "natalya.kozlova@example.com", + "interests": [ + { "value": "Литература и история", "label": "Литература и история" }, + { "value": "Образование и наука", "label": "Образование и наука" } + ] + }, + { + "id": 13, + "username": "Павел Новиков", + "photo": "https://i.pravatar.cc/150?img=71", + "about": "Спортсмен, занимаюсь бегом и триатлоном.", + "email": "pavel.novikov@example.com", + "interests": [ + { "value": "Спорт, фитнес и ЗОЖ", "label": "Спорт, фитнес и ЗОЖ" }, + { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + ] + }, + { + "id": 14, + "username": "Екатерина Михайлова", + "photo": "https://i.pravatar.cc/150?img=52", + "about": "Архитектор, увлекаюсь современным дизайном и урбанистикой.", + "email": "ekaterina.mikhailova@example.com", + "interests": [ + { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, + { "value": "Урбанистика", "label": "Урбанистика" } + ] + }, + { + "id": 15, + "username": "Виктор Соколов", + "photo": "https://i.pravatar.cc/150?img=72", + "about": "Бизнес-консультант, помогаю компаниям развиваться.", + "email": "viktor.sokolov@example.com", + "interests": [ + { "value": "Бизнес и предпринимательство", "label": "Бизнес и предпринимательство" }, + { "value": "Политика, социология, активизм и дебаты", "label": "Политика, социология, активизм и дебаты" } + ] + }, + { + "id": 16, + "username": "Анна Павлова", + "photo": "https://i.pravatar.cc/150?img=53", + "about": "Художник, работаю в стиле абстракционизма.", + "email": "anna.pavlova@example.com", + "interests": [ + { "value": "Искусство, фотография и дизайн", "label": "Искусство, фотография и дизайн" }, + { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + ] + }, + { + "id": 17, + "username": "Денис Иванов", + "photo": "https://i.pravatar.cc/150?img=73", + "about": "Ученый, занимаюсь исследованиями в области биотехнологий.", + "email": "denis.ivanov@example.com", + "interests": [ + { "value": "Биология и биотехнологии", "label": "Биология и биотехнологии" }, + { "value": "Образование и наука", "label": "Образование и наука" } + ] + }, + { + "id": 18, + "username": "Людмила Кузнецова", + "photo": "https://i.pravatar.cc/150?img=54", + "about": "Повар, специализируюсь на авторской кухне.", + "email": "lyudmila.kuznetsova@example.com", + "interests": [ + { "value": "Кулинария", "label": "Кулинария" }, + { "value": "Путешествия и туризм", "label": "Путешествия и туризм" } + ] + }, + { + "id": 19, + "username": "Григорий Петров", + "photo": "https://i.pravatar.cc/150?img=74", + "about": "Музыкант, играю на гитаре и пишу песни.", + "email": "grigoriy.petrov@example.com", + "interests": [ + { "value": "Музыка", "label": "Музыка" }, + { "value": "Кино и другое многомодальное искусство", "label": "Кино и другое многомодальное искусство" } + ] + }, + { + "id": 20, + "username": "Валентина Семенова", + "photo": "https://i.pravatar.cc/150?img=55", + "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": "Искусство, фотография и дизайн" } + ] + } +] \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sberhubproject/users/index.js b/server/routers/kfu-m-24-1/sberhubproject/users/index.js index c1be584..3f563b5 100644 --- a/server/routers/kfu-m-24-1/sberhubproject/users/index.js +++ b/server/routers/kfu-m-24-1/sberhubproject/users/index.js @@ -5,35 +5,44 @@ module.exports = router; const data = require('./data/users.json'); router.get('/', (req, res) => { - //res.status(500).send({ - // message: 'Internal server error' - //}); - res.json(data) + res.json(data); +}); + +router.get('/:pageSize/:page', (req, res) => { + const pageSize = parseInt(req.params.pageSize); + const page = parseInt(req.params.page); + res.json(data.slice(pageSize * (page - 1), pageSize * page)); }); router.get('/:id', (req, res) => { - //res.status(500).send({ - // message: 'Internal server error' - //}); - const userId = parseInt(req.params.id); - res.json(data.find(item => item.id = userId)); + const userId = parseInt(req.params.id); + res.json(data.find((item) => item.id === userId)); }); router.post('/', (req, res) => { - //res.status(500).send({ - // message: 'Internal server error' - //}); - const data = req.body; + res.status(201).send(); +}); +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; + } - res.status(200).send(); + res.status(201).send({ message: `${action} action processed` }); }); router.put('/:id', (req, res) => { - //res.status(500).send({ - // message: 'Internal server error' - //}); - const userId = parseInt(req.params.id); - const data = req.body; - res.status(200).send(); -}); \ No newline at end of file + res.status(204).send(); +}); + +router.delete('/:id', (req, res) => { + res.status(204).send(); +});