Ihonkina_PIbd-31_PMU/server/router.js
2024-01-08 22:45:27 +04:00

77 lines
2.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
const path = require('path');
module.exports = (req, res, next) => {
const data = JSON.parse(fs.readFileSync(path.join(__dirname, 'data.json'), 'utf8'));
if (req.url.startsWith('/search') && req.method === 'GET') {
try {
const searchText = req.query.name;
const searched = data.pets.filter(
(pet) =>
pet.name.toLowerCase().includes(searchText.toLowerCase())
);
return res.json(searched);
} catch (error) {
console.error('Error loading data:', error);
res.status(500).json({ message: 'Internal Server Error' });
}
} else if (req.url.startsWith('/report') && req.method === 'GET') {
try {
// Добавляем фильтрацию по дате рождения
const fromDate = req.query.fromDate;
const toDate = req.query.toDate;
const filteredData = filterByBirthday(data.pets, fromDate, toDate);
// Возвращаем отфильтрованные данные в формате отчета
const reportData = generateReport(filteredData);
res.json(reportData);
} catch (error) {
console.error('Error loading data:', error);
return res.status(500).json({ message: 'Internal Server Error' });
}
} else {
next();
}
};
// Функция generateReport для создания отчета с id
function generateReport(pets) {
return pets.map((pet, index) => ({
reportId: index + 1, // Уникальный id отчета (можете использовать другую логику)
petid: pet.id,
petname: pet.name,
birthday: pet.birthday,
userid: pet.userId,
login: getUserLogin(pet.userId)
}));
}
// Функция для фильтрации по дате рождения
function filterByBirthday(pets, fromDate, toDate) {
if (!fromDate && !toDate) {
return pets;
}
const filteredPets = pets.filter((pet) => {
const petBirthday = parseDate(pet.birthday);
return (!fromDate || petBirthday >= parseDate(fromDate)) &&
(!toDate || petBirthday <= parseDate(toDate));
});
return filteredPets;
}
// Функция для парсинга даты из строки в формате "dd.MM.yyyy"
function parseDate(dateString) {
const [day, month, year] = dateString.split('.').map(Number);
return new Date(year, month - 1, day);
}
// Функция для получения логина пользователя по userId
function getUserLogin(userId) {
const data = JSON.parse(fs.readFileSync(path.join(__dirname, 'data.json'), 'utf8'));
const user = data.users.find((user) => user.id === userId);
return user ? user.login : 'Unknown';
}