77 lines
2.6 KiB
JavaScript
77 lines
2.6 KiB
JavaScript
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';
|
||
}
|