/
Cooolprogrammers
/
web-nodejs-labs
Обзор
Документация
Войти
/
Cooolprogrammers
/
web-nodejs-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/src/services/lab8/task3/task3.service.js
133 строки
5 KB
darkvoid6@mail.ru
ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
18 дек 2025, 07:59
18 дек 2025, 07:59
f2c4f06
Код
Авторство
О чём код?
import fs from 'fs/promises'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); class Task3Service { constructor() { this.dataDir = path.join(__dirname, '..', '..', '..', '..', 'data', 'lab8'); this.task2GroupsPath = path.join(this.dataDir, 'task2', 'groups.json'); this.task3OutputPath = path.join(this.dataDir, 'task3', 'resultsQatar22.json'); } /** * Создает JSON всех матчей из данных task2 */ async processAllMatches() { try { // Создаем директорию для task3 если не существует await fs.mkdir(path.dirname(this.task3OutputPath), { recursive: true }); // Читаем данные групп из task2 const groupsData = await fs.readFile(this.task2GroupsPath, 'utf8'); const groups = JSON.parse(groupsData); // Собираем все матчи из всех групп const allMatches = []; groups.forEach(group => { if (group.matches && Array.isArray(group.matches)) { group.matches.forEach(match => { // Добавляем информацию о группе к каждому матчу const enhancedMatch = { ...match, group: group.group, matchType: 'group', // Добавляем информацию о результате для фронтенда result: this.determineMatchResult(match.score, match.team1, match.team2) }; allMatches.push(enhancedMatch); }); } }); // Сортируем матчи по дате и времени (хронологический порядок) const sortedMatches = allMatches.sort((a, b) => { const dateA = new Date(`${a.date}T${a.time}`); const dateB = new Date(`${b.date}T${b.time}`); return dateA - dateB; }); // Сохраняем результат await fs.writeFile(this.task3OutputPath, JSON.stringify(sortedMatches, null, 2), 'utf8'); console.log(`Обработано ${sortedMatches.length} матчей`); return { success: true, message: `Данные успешно обработаны. Создано записей: ${sortedMatches.length}`, matchesCount: sortedMatches.length }; } catch (error) { console.error('Ошибка при обработке матчей:', error); throw error; } } /** * Определяет результат матча для цветового кодирования */ determineMatchResult(score, team1, team2) { if (!score || score === '0-0') { return 'draw'; // Ничья } try { const [score1, score2] = score.split('-').map(num => parseInt(num.trim())); if (isNaN(score1) || isNaN(score2)) { return 'draw'; // Если не удалось распарсить счет - считаем ничьей } if (score1 > score2) { return 'team1_win'; // Победа команды 1 } else if (score1 < score2) { return 'team2_win'; // Победа команды 2 } else { return 'draw'; // Ничья } } catch (error) { console.error('Ошибка определения результата матча:', error); return 'draw'; } } /** * Получает все матчи (отсортированные) */ async getAllMatches() { try { const data = await fs.readFile(this.task3OutputPath, 'utf8'); return JSON.parse(data); } catch (error) { if (error.code === 'ENOENT') { throw new Error('Данные матчей не найдены. Сначала выполните обработку данных.'); } throw error; } } /** * Проверяет статус данных */ async getDataStatus() { try { const task2DataExists = await fs.access(this.task2GroupsPath).then(() => true).catch(() => false); const task3DataExists = await fs.access(this.task3OutputPath).then(() => true).catch(() => false); return { task2Data: task2DataExists, task3Data: task3DataExists }; } catch (error) { return { task2Data: false, task3Data: false }; } } } export default new Task3Service();