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';
|
|||
|
}
|