const router = require('express').Router() const fs = require('node:fs') const path = require('node:path') // Функция для чтения JSON файла и случайной модификации содержимого function readAndModifyJson(filePath) { try { // Используем fs.readFileSync вместо require для избежания кэширования const fullPath = path.resolve(__dirname, filePath); const fileContent = fs.readFileSync(fullPath, 'utf8'); const jsonContent = JSON.parse(fileContent); // Если это список учеников, немного перемешаем их if (jsonContent.body && Array.isArray(jsonContent.body.students)) { jsonContent.body.students.sort(() => 0.5 - Math.random()); } // Если это список реакций, обновим время создания и слегка перемешаем if (jsonContent.body && Array.isArray(jsonContent.body.reactions)) { const now = Date.now(); jsonContent.body.reactions.forEach((reaction, index) => { // Интервал от 10 секунд до 2 минут назад const randomTime = now - Math.floor(Math.random() * (120000 - 10000) + 10000); reaction.created = new Date(randomTime).toISOString(); }); // Сортируем реакции по времени создания (новые сверху) jsonContent.body.reactions.sort((a, b) => new Date(b.created) - new Date(a.created) ); } // Если это список уроков, обновим даты if (jsonContent.body && Array.isArray(jsonContent.body) && jsonContent.body[0] && jsonContent.body[0].name) { jsonContent.body.forEach((lesson) => { // Случайная дата в пределах последних 3 месяцев const randomDate = new Date(); randomDate.setMonth(randomDate.getMonth() - Math.random() * 3); lesson.date = randomDate.toISOString(); lesson.created = new Date(randomDate.getTime() - 86400000).toISOString(); // Создан за день до даты }); } // Если это список курсов, добавим случайные данные if (jsonContent.body && Array.isArray(jsonContent.body) && jsonContent.body[0] && jsonContent.body[0].id) { jsonContent.body.forEach((course) => { course.startDt = new Date(new Date().getTime() - Math.random() * 31536000000).toISOString(); // В пределах года course.created = new Date(new Date(course.startDt).getTime() - 604800000).toISOString(); // Создан за неделю до начала }); } return jsonContent; } catch (error) { console.error(`Error reading/modifying file ${filePath}:`, error); return { success: false, error: "Failed to read file" }; } } // Функция для чтения JSON без модификации function readJsonFile(filePath) { try { const fullPath = path.resolve(__dirname, filePath); const fileContent = fs.readFileSync(fullPath, 'utf8'); return JSON.parse(fileContent); } catch (error) { console.error(`Error reading file ${filePath}:`, error); return { success: false, error: "Failed to read file" }; } } const timer = (time = 1000) => (_req, _res, next) => setTimeout(next, time) // Небольшая задержка для имитации реальной сети router.use(timer(100)); const config = { examCreated: false } router.get('/course/list', (req, res) => { const modifiedData = readAndModifyJson('../mocks/courses/list/success.json'); res.send(modifiedData); }) router.get('/course/:id', (req, res) => { if(req.params.id === 'undefined') return res.status(400).send({ success: false, error: 'Invalid course id' }) if (config.examCreated) { config.examCreated = false; const modifiedData = readAndModifyJson('../mocks/courses/by-id/with-exam.json'); return res.send(modifiedData); } const modifiedData = readAndModifyJson('../mocks/courses/by-id/success.json'); res.send(modifiedData); }) router.get('/course/students/:courseId', (req, res) => { const modifiedData = readAndModifyJson('../mocks/courses/all-students/success.json'); res.send(modifiedData); }) router.post('/course', (req, res) => { const baseData = readJsonFile('../mocks/courses/create/success.json'); // Добавляем данные из запроса if (baseData.body) { baseData.body.name = req.body.name || baseData.body.name; baseData.body.created = new Date().toISOString(); } res.send(baseData); }) router.post('/course/toggle-exam-with-jury/:id', (req, res) => { config.examCreated = true; res.send({ success: true }) }) router.get('/lesson/list/:courseId', (req, res) => { const modifiedData = readAndModifyJson('../mocks/lessons/list/success.json'); res.send(modifiedData); }) router.get('/lesson/:courseId/ai/generate-lessons', timer(3000), (req, res) => { const modifiedData = readAndModifyJson('../mocks/lessons/generate/success.json'); res.send(modifiedData); }) router.post('/lesson', (req, res) => { const baseData = readJsonFile('../mocks/lessons/create/success.json'); // Добавляем данные из запроса if (baseData.body) { baseData.body.name = req.body.name || baseData.body.name; baseData.body.date = req.body.date || new Date().toISOString(); baseData.body.created = new Date().toISOString(); } res.send(baseData); }) router.post('/lesson/access-code', (req, res) => { const modifiedData = readAndModifyJson('../mocks/lessons/access-code/create/success.json'); // Обновляем дату истечения через час от текущего времени if (modifiedData.body) { modifiedData.body.expires = new Date(Date.now() + 60 * 60 * 1000).toISOString(); modifiedData.body.created = new Date().toISOString(); } res.send(modifiedData); }) router.get('/lesson/access-code/:accessCode', (req, res) => { const modifiedData = readAndModifyJson('../mocks/lessons/access-code/get/success.json'); // Обновляем дату истечения через час от текущего времени if (modifiedData.body && modifiedData.body.accessCode) { modifiedData.body.accessCode.expires = new Date(Date.now() + 60 * 60 * 1000).toISOString(); modifiedData.body.accessCode.created = new Date().toISOString(); } res.send(modifiedData); }) router.get('/lesson/:lessonId', (req, res) => { const modifiedData = readAndModifyJson('../mocks/lessons/byid/success.json'); // Обновляем даты if (modifiedData.body) { modifiedData.body.date = new Date().toISOString(); modifiedData.body.created = new Date(Date.now() - 86400000).toISOString(); // Создан день назад } res.send(modifiedData); }) router.delete('/lesson/:lessonId', (req, res) => { res.send({ success: true, body: { ok: true }}) }) router.put('/lesson', (req, res) => { res.send({ success: true, body: req.body }) }) router.post('/lesson/reaction/:lessonId', (req, res) => { // Simulate processing a new reaction const { reaction } = req.body; const lessonId = req.params.lessonId; // Log the reaction for debugging console.log(`Received reaction "${reaction}" for lesson ${lessonId}`); // Return success response res.send({ success: true, body: { _id: `r-${Date.now()}-${Math.floor(Math.random() * 1000)}`, reaction, lessonId, created: new Date().toISOString() } }); }); module.exports = router