Compare commits
4 Commits
gamehub
...
ff15a48414
| Author | SHA1 | Date | |
|---|---|---|---|
| ff15a48414 | |||
| 367c0de6fb | |||
| 3c89d8b9a8 | |||
| bdc8d9a8e0 |
@@ -1,16 +1,40 @@
|
||||
const router = require('express').Router()
|
||||
const {MasterModel} = require('./model/master')
|
||||
const mongoose = require("mongoose")
|
||||
const {OrderModel} = require("./model/order")
|
||||
|
||||
|
||||
router.get('/masters', async (req, res,next) => {
|
||||
router.get("/masters", async (req, res, next) => {
|
||||
try {
|
||||
const master = await MasterModel.find({})
|
||||
res.status(200).send({success: true, body: master})
|
||||
const masters = await MasterModel.find({});
|
||||
const orders = await OrderModel.find({});
|
||||
|
||||
const mastersWithOrders = masters.map((master) => {
|
||||
const masterOrders = orders.filter((order) => {
|
||||
return (
|
||||
order?.master && order.master.toString() === master._id.toString()
|
||||
);
|
||||
});
|
||||
|
||||
const schedule = masterOrders.map((order) => ({
|
||||
id: order._id,
|
||||
startWashTime: order.startWashTime,
|
||||
endWashTime: order.endWashTime,
|
||||
}));
|
||||
|
||||
return {
|
||||
id: master._id,
|
||||
name: master.name,
|
||||
schedule: schedule,
|
||||
phone: master.phone,
|
||||
};
|
||||
});
|
||||
|
||||
res.status(200).send({ success: true, body: mastersWithOrders });
|
||||
} catch (error) {
|
||||
next(error)
|
||||
next(error);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
router.delete('/masters/:id', async (req, res,next) => {
|
||||
const { id } = req.params;
|
||||
|
||||
@@ -8,44 +8,22 @@ router.get("/update-like", (request, response) => {
|
||||
response.send(require("./json/gamepage/success.json"));
|
||||
});
|
||||
|
||||
router.get("/add-to-cart", (request, response) => {
|
||||
response.send(require("./json/home-page-data/games-in-cart.json"));
|
||||
});
|
||||
|
||||
router.get("/categories", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
response.send(require("./json/categories/success.json"));
|
||||
});
|
||||
|
||||
router.get("/favourites", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
});
|
||||
|
||||
// router.get("/shopping-cart", (request, response) => {
|
||||
// response.send(require("./json/shopping-cart/success.json"));
|
||||
// });
|
||||
|
||||
router.get("/shopping-cart", (request, response) => {
|
||||
response.send(require("./json/home-page-data/games-in-cart.json"));
|
||||
response.send(require("./json/shopping-cart/success.json"));
|
||||
});
|
||||
|
||||
// Добавляем поддержку разных ответов для /home
|
||||
router.get("/home", (req, res) => {
|
||||
if (stubs.home === "success") {
|
||||
res.send(require("./json/home-page-data/success.json"));
|
||||
} else if (stubs.home === "empty") {
|
||||
res.send({ data: [] }); // Отправляем пустой массив
|
||||
} else {
|
||||
res.status(500).json({ success: false, message: "Server error" });
|
||||
}
|
||||
router.get("/home", (request, response) => {
|
||||
response.send(require("./json/home-page-data/success.json"));
|
||||
});
|
||||
|
||||
router.get("/all-games", (request, response) => {
|
||||
response.send(require("./json/home-page-data/all-games.json"));
|
||||
});
|
||||
|
||||
const stubs = {
|
||||
home: "success",
|
||||
};
|
||||
|
||||
// // Маршрут для обновления лайков
|
||||
// router.post("/update-like", (request, response) => {
|
||||
@@ -60,6 +38,7 @@ const stubs = {
|
||||
// });
|
||||
// });
|
||||
|
||||
|
||||
const fs = require("fs").promises;
|
||||
const path = require("path");
|
||||
|
||||
@@ -70,7 +49,7 @@ const commentsFilePath = path.join(__dirname, "./json/gamepage/success.json");
|
||||
async function readComments() {
|
||||
const data = await fs.readFile(commentsFilePath, "utf-8");
|
||||
const parsedData = JSON.parse(data);
|
||||
console.log("Прочитанные данные:", parsedData); // Логируем полученные данные
|
||||
console.log("Прочитанные данные:", parsedData); // Логируем полученные данные
|
||||
return parsedData;
|
||||
}
|
||||
// Write to JSON file
|
||||
@@ -109,149 +88,5 @@ router.post("/update-like", async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Путь к JSON-файлу с корзиной
|
||||
const cartFilePath = path.join(
|
||||
__dirname,
|
||||
"./json/home-page-data/games-in-cart.json"
|
||||
);
|
||||
|
||||
// Функция для чтения JSON-файла
|
||||
async function readCart() {
|
||||
const data = await fs.readFile(cartFilePath, "utf-8");
|
||||
return JSON.parse(data);
|
||||
}
|
||||
|
||||
// Функция для записи в JSON-файл
|
||||
async function writeCart(data) {
|
||||
await fs.writeFile(cartFilePath, JSON.stringify(data, null, 2), "utf-8");
|
||||
}
|
||||
|
||||
// Маршрут для добавления/удаления товара в корзине
|
||||
router.post("/add-to-cart", async (req, res) => {
|
||||
const { id, action } = req.body;
|
||||
|
||||
// Проверка наличия id и action
|
||||
if (id === undefined || action === undefined) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ success: false, message: "Invalid id or action" });
|
||||
}
|
||||
|
||||
try {
|
||||
const cartData = await readCart();
|
||||
let ids = cartData.data.ids;
|
||||
|
||||
if (action === "add") {
|
||||
// Если action "add", добавляем товар, если его нет в корзине
|
||||
if (!ids?.includes(id)) {
|
||||
ids.push(id);
|
||||
}
|
||||
} else if (action === "remove") {
|
||||
// Если action "remove", удаляем товар, если он есть в корзине
|
||||
if (ids?.includes(id)) {
|
||||
ids = ids.filter((item) => item !== id);
|
||||
}
|
||||
} else {
|
||||
// Если action невалиден
|
||||
return res
|
||||
.status(400)
|
||||
.json({ success: false, message: "Invalid action" });
|
||||
}
|
||||
|
||||
// Записываем обновленные данные обратно в файл
|
||||
cartData.data.ids = ids;
|
||||
await writeCart(cartData);
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
message: "Cart updated successfully",
|
||||
data: cartData.data, // Возвращаем обновленные данные
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error updating cart:", error);
|
||||
res.status(500).json({ success: false, message: "Server error" });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
const createElement = (key, value, buttonTitle, basePath) => `
|
||||
<label>
|
||||
<input name="${key}" type="radio" ${
|
||||
stubs[key] === value ? "checked" : ""
|
||||
} onclick="fetch('${basePath}/admin/set/${key}/${value}')"/>
|
||||
${buttonTitle || value}
|
||||
</label>
|
||||
`;
|
||||
|
||||
router.get("/admin/home", (request, response) => {
|
||||
const basePath = request.baseUrl; // Получаем базовый путь маршрутизатора
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /home</legend>
|
||||
${createElement("home", "success", "Отдать успешный ответ", basePath)}
|
||||
${createElement("home", "empty", "Отдать пустой массив", basePath)}
|
||||
${createElement("home", "error", "Отдать ошибку", basePath)}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/game-page", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /game-page</legend>
|
||||
${createElement(
|
||||
"game-page",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("game-page", "empty", "Отдать пустой массив")}
|
||||
${createElement("game-page", "error", "Отдать ошибку")}
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/categories", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /categories</legend>
|
||||
${createElement(
|
||||
"categories",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("categories", "empty", "Отдать пустой массив")}
|
||||
${createElement("categories", "error", "Отдать ошибку")}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/favourites", (request, response) => {
|
||||
response.send(`
|
||||
<div>
|
||||
<fieldset>
|
||||
<legend>Настройка данных для /favourites</legend>
|
||||
${createElement(
|
||||
"favourites",
|
||||
"success",
|
||||
"Отдать успешный ответ"
|
||||
)}
|
||||
${createElement("favourites", "empty", "Отдать пустой массив")}
|
||||
${createElement("favourites", "error", "Отдать ошибку")}
|
||||
</fieldset>
|
||||
</div>
|
||||
`);
|
||||
});
|
||||
|
||||
router.get("/admin/set/:key/:value", (request, response) => {
|
||||
const { key, value } = request.params;
|
||||
stubs[key] = value;
|
||||
response.send("Настройки обновлены!");
|
||||
});
|
||||
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"games1": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "How to Survive",
|
||||
"price": 259,
|
||||
"old_price": 500,
|
||||
"image": "sales_game1",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "Red Solstice 2 Survivors",
|
||||
"price": 561,
|
||||
"image": "sales_game2",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Sons Of The Forests",
|
||||
"price": 820,
|
||||
"old_price": 1100,
|
||||
"image": "new_game2",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "The Witcher 3: Wild Hunt",
|
||||
"price": 990,
|
||||
"old_price": 1200,
|
||||
"image": "leaders_game4",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Atomic Heart",
|
||||
"price": 1200,
|
||||
"old_price": 2500,
|
||||
"image": "leaders_game5",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Crab Game",
|
||||
"price": 600,
|
||||
"old_price": 890,
|
||||
"image": "leaders_game6",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
}
|
||||
],
|
||||
"games2": [
|
||||
{
|
||||
"id": 7,
|
||||
"title": "Alpha League",
|
||||
"price": 299,
|
||||
"image": "new_game1",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "Sons Of The Forests",
|
||||
"price": 820,
|
||||
"old_price": 1100,
|
||||
"image": "new_game2",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "Pacific Drives",
|
||||
"price": 1799,
|
||||
"image": "new_game3",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "The Witcher 3: Wild Hunt",
|
||||
"price": 990,
|
||||
"old_price": 1200,
|
||||
"image": "leaders_game4",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Atomic Heart",
|
||||
"price": 1200,
|
||||
"old_price": 2500,
|
||||
"image": "leaders_game5",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Crab Game",
|
||||
"price": 600,
|
||||
"old_price": 890,
|
||||
"image": "leaders_game6",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
}
|
||||
],
|
||||
"games3": [
|
||||
{
|
||||
"id": 10,
|
||||
"title": "Elden Ring",
|
||||
"price": 3295,
|
||||
"old_price": 3599,
|
||||
"image": "leaders_game2",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "Counter-Strike 2",
|
||||
"price": 479,
|
||||
"image": "leaders_game1",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "PUBG: BATTLEGROUNDS",
|
||||
"price": 199,
|
||||
"image": "leaders_game3",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "The Witcher 3: Wild Hunt",
|
||||
"price": 990,
|
||||
"old_price": 1200,
|
||||
"image": "leaders_game4",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Atomic Heart",
|
||||
"price": 1200,
|
||||
"old_price": 2500,
|
||||
"image": "leaders_game5",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Crab Game",
|
||||
"price": 600,
|
||||
"old_price": 890,
|
||||
"image": "leaders_game6",
|
||||
"os": "windows",
|
||||
"fav1": "star1",
|
||||
"fav2": "star2"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -5,28 +5,28 @@
|
||||
{
|
||||
"username": "Пользователь1",
|
||||
"text": "Текст комментария 1",
|
||||
"likes": 13,
|
||||
"likes": 9,
|
||||
"rating": 8,
|
||||
"date": "2025-03-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь2",
|
||||
"text": "Текст комментария 2",
|
||||
"likes": 10,
|
||||
"likes": 7,
|
||||
"rating": 7,
|
||||
"date": "2025-01-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь3",
|
||||
"text": "Текст комментария 3",
|
||||
"likes": 4,
|
||||
"likes": 5,
|
||||
"rating": 3,
|
||||
"date": "2025-02-01T10:00:00Z"
|
||||
},
|
||||
{
|
||||
"username": "Пользователь4",
|
||||
"text": "Текст комментария 4",
|
||||
"likes": 18,
|
||||
"likes": 15,
|
||||
"rating": 2,
|
||||
"date": "2025-12-01T10:00:00Z"
|
||||
}
|
||||
|
||||
@@ -3,186 +3,147 @@
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "Elden Ring",
|
||||
"image": "game17",
|
||||
"price": 3295,
|
||||
"old_price": 3599,
|
||||
"imgPath": "img_top_17",
|
||||
"description": "Крупномасштабная RPG, действие которой происходит в обширном открытом мире c богатой мифологией и множеством опасных врагов.",
|
||||
"name": "The Witcher 3: Wild Hunt",
|
||||
"image": "game1",
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_1",
|
||||
"description": "Эпическая RPG с открытым миром, в которой Геральт из Ривии охотится на монстров и раскрывает политические заговоры.",
|
||||
"category": "RPG"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "The Witcher 3: Wild Hunt",
|
||||
"image": "game1",
|
||||
"price": 990,
|
||||
"old_price": 1200,
|
||||
"imgPath": "img_top_1",
|
||||
"description": "Эпическая RPG с открытым миром, в которой Геральт из Ривии охотится на монстров и раскрывает политические заговоры.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"title": "Red Dead Redemption 2",
|
||||
"name": "Red Dead Redemption 2",
|
||||
"image": "game2",
|
||||
"price": 980,
|
||||
"old_price": 3800,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_2",
|
||||
"description": "Приключенческая игра с открытым миром на Диком Западе, рассказывающая историю Артура Моргана.",
|
||||
"category": "Adventures"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Forza Horizon 5",
|
||||
"name": "Forza Horizon 5",
|
||||
"image": "game3",
|
||||
"price": 1900,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_3",
|
||||
"description": "Гоночная игра с огромным открытым миром, действие которой происходит в Мексике.",
|
||||
"category": "Race"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "Atomic Heart",
|
||||
"name": "Atomic Heart",
|
||||
"image": "game4",
|
||||
"price": 1200,
|
||||
"old_price": 2500,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_4",
|
||||
"description": "Экшен-шутер с элементами RPG, разворачивающийся в альтернативной Советской России.",
|
||||
"category": "Shooters"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "Counter-Strike 2",
|
||||
"name": "Counter-Strike 2",
|
||||
"image": "game5",
|
||||
"price": 479,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_5",
|
||||
"description": "Популярный онлайн-шутер с соревновательным геймплеем и тактическими элементами.",
|
||||
"category": "Shooters"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "Grand Theft Auto V",
|
||||
"name": "Grand Theft Auto V",
|
||||
"image": "game6",
|
||||
"price": 700,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_6",
|
||||
"description": "Игра с открытым миром, где можно погрузиться в криминальный мир Лос-Сантоса.",
|
||||
"category": "Adventures"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"title": "Assassin’s Creed IV: Black Flag",
|
||||
"name": "Assassin’s Creed IV: Black Flag",
|
||||
"image": "game7",
|
||||
"price": 1100,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_7",
|
||||
"description": "Приключенческая игра о пиратах и морских сражениях в эпоху золотого века пиратства.",
|
||||
"category": "Adventures"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"title": "Spider-Man",
|
||||
"name": "Spider-Man",
|
||||
"image": "game8",
|
||||
"price": 3800,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_8",
|
||||
"description": "Игра о супергерое Человеке-пауке с захватывающими битвами и паркуром по Нью-Йорку.",
|
||||
"category": "Action"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"title": "Assassin’s Creed Mirage",
|
||||
"name": "Assassin’s Creed Mirage",
|
||||
"image": "game9",
|
||||
"price": 1600,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_9",
|
||||
"description": "Приключенческая игра с упором на скрытность, вдохновленная классическими частями серии.",
|
||||
"category": "Action"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"title": "Assassin’s Creed Valhalla",
|
||||
"name": "Assassin’s Creed Valhalla",
|
||||
"image": "game10",
|
||||
"price": 800,
|
||||
"old_price": 2200,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_10",
|
||||
"description": "RPG с открытым миром о викингах, включающая битвы, исследования и строительство поселений.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"title": "ARK: Survival Evolved",
|
||||
"name": "ARK: Survival Evolved",
|
||||
"image": "game11",
|
||||
"price": 790,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_11",
|
||||
"description": "Выживание в открытом мире с динозаврами, строительством и многопользовательскими элементами.",
|
||||
"category": "Simulators"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"title": "FIFA 23",
|
||||
"name": "FIFA 23",
|
||||
"image": "game12",
|
||||
"price": 3900,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_12",
|
||||
"description": "Популярный футбольный симулятор с улучшенной графикой и реалистичным геймплеем.",
|
||||
"category": "Sports"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"title": "Dirt 5",
|
||||
"name": "Dirt 5",
|
||||
"image": "game13",
|
||||
"price": 2300,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_13",
|
||||
"description": "Аркадная гоночная игра с фокусом на ралли и внедорожных соревнованиях.",
|
||||
"category": "Race"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"title": "Cyberpunk 2077",
|
||||
"name": "Cyberpunk 2077",
|
||||
"image": "game14",
|
||||
"price": 3400,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_14",
|
||||
"description": "RPG в киберпанк-сеттинге с нелинейным сюжетом и детализированным открытым миром.",
|
||||
"category": "RPG"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"title": "Age of Empires IV",
|
||||
"name": "Age of Empires IV",
|
||||
"image": "game15",
|
||||
"price": 3200,
|
||||
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_15",
|
||||
"description": "Классическая стратегия в реальном времени с историческими кампаниями.",
|
||||
"category": "Strategies"
|
||||
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"title": "Civilization VI",
|
||||
"name": "Civilization VI",
|
||||
"image": "game16",
|
||||
"price": 4200,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_16",
|
||||
"description": "Глобальная пошаговая стратегия, в которой игроки строят и развивают цивилизации.",
|
||||
"category": "Strategies"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"ids": [
|
||||
3,
|
||||
13,
|
||||
1,
|
||||
10,
|
||||
4,
|
||||
9,
|
||||
15,
|
||||
6,
|
||||
7
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -3,51 +3,43 @@
|
||||
"data": {
|
||||
"topSail": [
|
||||
{
|
||||
"id": 1,
|
||||
"image": "game1",
|
||||
"price": 1500,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_1"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"image": "game2",
|
||||
"price": 980,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_2"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"image": "game3",
|
||||
"price": 1900,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_3"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"image": "game4",
|
||||
"price": 1200,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_4"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"image": "game5",
|
||||
"price": 479,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_5"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"image": "game6",
|
||||
"price": 700,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_6"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"image": "game7",
|
||||
"price": 1100,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_7"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"image": "game8",
|
||||
"price": 3800,
|
||||
"text": "$10",
|
||||
"imgPath": "img_top_8"
|
||||
}
|
||||
],
|
||||
@@ -105,27 +97,23 @@
|
||||
{
|
||||
"image": "news1",
|
||||
"text": "Разработчики Delta Force: Hawk Ops представили крупномасштабный режим Havoc Warfare",
|
||||
"imgPath": "img_news_1",
|
||||
"link": "https://gamemag.ru/news/185583/delta-force-hawk-ops-gameplay-showcase-havoc-warfare"
|
||||
"imgPath": "img_news_1"
|
||||
},
|
||||
{
|
||||
"image": "news2",
|
||||
"text": "Первый трейлер Assassin’s Creed Shadows — с темнокожим самураем в феодальной Японии",
|
||||
"imgPath": "img_news_2",
|
||||
"link": "https://stopgame.ru/newsdata/62686/pervyy_trailer_assassin_s_creed_shadows_s_temnokozhim_samuraem_v_feodalnoy_yaponii"
|
||||
"imgPath": "img_news_2"
|
||||
},
|
||||
{
|
||||
"image": "news3",
|
||||
"text": "Призрак Цусимы» вышел на ПК — и уже ставит рекорды для Sony",
|
||||
"imgPath": "img_news_3",
|
||||
"link": "https://stopgame.ru/newsdata/62706/prizrak_cusimy_vyshel_na_pk_i_uzhe_stavit_rekordy_dlya_sony"
|
||||
"imgPath": "img_news_3"
|
||||
},
|
||||
{
|
||||
"image": "news4",
|
||||
"text": "Авторы Skull and Bones расширяют планы на второй сезон",
|
||||
"imgPath": "img_news_4",
|
||||
"link": "https://stopgame.ru/newsdata/62711/avtory_skull_and_bones_rasshiryayut_plany_na_vtoroy_sezon"
|
||||
"text": "Авторы Skull and Bones расширяют планы на второй сезо",
|
||||
"imgPath": "img_news_4"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
602
server/routers/kfu-m-24-1/sberhubproject/events/data/event.json
Normal file
602
server/routers/kfu-m-24-1/sberhubproject/events/data/event.json
Normal file
@@ -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"
|
||||
}
|
||||
]
|
||||
40
server/routers/kfu-m-24-1/sberhubproject/events/index.js
Normal file
40
server/routers/kfu-m-24-1/sberhubproject/events/index.js
Normal file
@@ -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` });
|
||||
});
|
||||
@@ -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);
|
||||
router.use('/events', eventsRouter);
|
||||
|
||||
@@ -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)
|
||||
});
|
||||
res.json(data);
|
||||
});
|
||||
|
||||
@@ -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": "Литература и история" }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
{
|
||||
"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": "Искусство, фотография и дизайн" }
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -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();
|
||||
});
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
router.delete('/:id', (req, res) => {
|
||||
res.status(204).send();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user