PIBD-31-Batylkin-Mobile-App/server/router.js

77 lines
2.6 KiB
JavaScript
Raw Normal View History

2024-01-08 22:10:47 +04:00
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';
}