From 26c66f16b48460881f314c8f7e44b16e0cb29f48 Mon Sep 17 00:00:00 2001 From: Julya Shapaeva Date: Sat, 8 Feb 2025 14:33:29 +0300 Subject: [PATCH] Add queries to dogsitter-viewing --- server/routers/dogsitters-finder/index.js | 157 ++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/server/routers/dogsitters-finder/index.js b/server/routers/dogsitters-finder/index.js index 0e7b296..075220e 100644 --- a/server/routers/dogsitters-finder/index.js +++ b/server/routers/dogsitters-finder/index.js @@ -68,4 +68,161 @@ router.get("/auth/session", (request, response) => { } }); + +// Проверка взаимодействия между пользователем и догситтером +router.get("/interactions/check", (req, res) => { + const { owner_id, dogsitter_id } = req.query; + + const usersFilePath = path.resolve(__dirname, "../json/users/success.json"); + + delete require.cache[require.resolve(usersFilePath)]; + const usersFile = require(usersFilePath); + + const interactions = usersFile.interactions || []; + + const exists = interactions.some( + (interaction) => + interaction.owner_id === Number(owner_id) && + interaction.dogsitter_id === Number(dogsitter_id) + ); + + res.json({ exists }); +}); + +// Добавление нового взаимодействия +router.post("/interactions", (req, res) => { + const { owner_id, dogsitter_id, interaction_type } = req.body; + + if (!owner_id || !dogsitter_id || !interaction_type) { + return res.status(400).json({ error: "Missing required fields" }); + } + + const usersFilePath = path.resolve(__dirname, "../json/users/success.json"); + + delete require.cache[require.resolve(usersFilePath)]; + const usersFile = require(usersFilePath); + + if (!usersFile.interactions) { + usersFile.interactions = []; + } + + // Проверяем, существует ли уже такое взаимодействие + const exists = usersFile.interactions.some( + (interaction) => + interaction.owner_id === Number(owner_id) && + interaction.dogsitter_id === Number(dogsitter_id) + ); + + if (!exists) { + usersFile.interactions.push({ + owner_id: Number(owner_id), + dogsitter_id: Number(dogsitter_id), + interaction_type, + }); + + fs.writeFileSync( + usersFilePath, + JSON.stringify(usersFile, null, 2), + "utf8" + ); + + console.log( + `Добавлено взаимодействие: owner_id=${owner_id}, dogsitter_id=${dogsitter_id}` + ); + } + + res.json({ success: true }); +}); + +router.get("/dogsitter-viewing", (req, res) => { + const { id } = req.query; + console.log(`Получен запрос для dogsitter с ID: ${id}`); + + const usersFile = require(`../json/users/${stubs.users}.json`); + const users = usersFile.data; // Извлекаем массив из свойства "data" + + const user = users.find((user) => user.id === Number(id)); + + if (user) { + res.json(user); // Возвращаем найденного пользователя + } else { + res.status(404).json({ error: "User not found" }); // Если пользователь не найден + } +}); + +const fs = require('fs'); +const path = require('path'); + + +router.post('/dogsitter-viewing/rating/:id', (req, res) => { + const { id } = req.params; + const { rating } = req.body; + + if (!rating || rating < 1 || rating > 5) { + return res.status(400).json({ error: 'Некорректная оценка' }); + } + + const usersFilePath = path.resolve(__dirname, '../json/users/success.json'); + + delete require.cache[require.resolve(usersFilePath)]; + const usersFile = require(usersFilePath); + const users = usersFile.data; + + const userIndex = users.findIndex(user => user.id === Number(id)); + if (userIndex === -1) { + return res.status(404).json({ error: 'Догситтер не найден' }); + } + + if (!users[userIndex].ratings) { + users[userIndex].ratings = []; + } + users[userIndex].ratings.push(rating); + + if (users[userIndex].ratings.length > 100) { + users[userIndex].ratings.shift(); + } + + const total = users[userIndex].ratings.reduce((sum, r) => sum + r, 0); + users[userIndex].rating = parseFloat((total / users[userIndex].ratings.length).toFixed(2)); + + fs.writeFileSync(usersFilePath, JSON.stringify({ data: users }, null, 2), 'utf8'); + + console.log(`Обновлен рейтинг догситтера ${id}: ${users[userIndex].rating}`); + + res.json({ rating: users[userIndex].rating, ratings: users[userIndex].ratings }); +}); + + +router.patch('/users/:id', (req, res) => { + const { id } = req.params; + const updateData = req.body; + + console.log('Полученные данные для обновления:', updateData); + + + const usersFilePath = path.resolve(__dirname, '../json/users/success.json'); + + delete require.cache[require.resolve(usersFilePath)]; + const usersFile = require(usersFilePath); + const users = usersFile.data; + + const userIndex = users.findIndex((user) => user.id === Number(id)); + if (userIndex === -1) { + return res.status(404).json({ error: 'User not found' }); + } + + users[userIndex] = { ...users[userIndex], ...updateData }; + + fs.writeFileSync( + usersFilePath, + JSON.stringify({ data: users }, null, 2), + 'utf8' + ); + + console.log('Обновлённые данные пользователя:', users[userIndex]); + + res.json(users[userIndex]); +}); + + module.exports = router \ No newline at end of file -- 2.45.2