From 26c66f16b48460881f314c8f7e44b16e0cb29f48 Mon Sep 17 00:00:00 2001
From: Julya Shapaeva <shapaeva03@mail.ru>
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