97 lines
2.5 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const router = require('express').Router()
const timer = (time = 300) => (req, res, next) => setTimeout(next, time)
const dataDir = path.join(__dirname, 'data')
const readJson = (fileName) => {
const filePath = path.join(dataDir, fileName)
const content = fs.readFileSync(filePath, 'utf-8')
return JSON.parse(content)
}
const sendNotFound = (res, message) => {
res.status(404).json({ error: { message }, data: null })
}
router.use(timer())
router.use((req, res, next) => {
res.type('application/json')
next()
})
router.post('/auth', (req, res) => {
res.json(readJson('auth.json'))
})
router.get('/chains', (req, res) => {
res.json(readJson('chains.json'))
})
router.get('/chain/:id', (req, res) => {
const chains = readJson('chains.json')
const chain = chains.find((item) => item.id === req.params.id || item._id === req.params.id)
if (!chain) {
return sendNotFound(res, `Цепочка ${req.params.id} не найдена`)
}
return res.json(chain)
})
router.get('/task/:id', (req, res) => {
const chains = readJson('chains.json')
const task = chains
.flatMap((chain) => chain.tasks || [])
.find((item) => item.id === req.params.id || item._id === req.params.id)
if (!task) {
return sendNotFound(res, `Задание ${req.params.id} не найдено`)
}
return res.json(task)
})
router.post('/submit', (req, res) => {
const response = readJson('submit.json')
res.json(response)
})
router.get('/check-status/:queueId', (req, res) => {
const statuses = readJson('queue-status.json')
const status = statuses[req.params.queueId]
if (!status) {
return sendNotFound(res, `Статус очереди ${req.params.queueId} не найден`)
}
return res.json(status)
})
router.get('/user/:userId/stats', (req, res) => {
const statsMap = readJson('user-stats.json')
const stats = statsMap[req.params.userId]
if (!stats) {
return sendNotFound(res, `Статистика пользователя ${req.params.userId} не найдена`)
}
return res.json(stats)
})
router.get('/user/:userId/submissions', (req, res) => {
const submissionsMap = readJson('user-submissions.json')
const submissions = submissionsMap[req.params.userId] || []
return res.json(submissions)
})
router.get('/stats', (req, res) => {
res.json(readJson('system-stats.json'))
})
router.get('/submissions', (req, res) => {
res.json(readJson('submissions.json'))
})
module.exports = router