create-exam-project
Version:
Create exam projects with React + Express + PostgreSQL in seconds
99 lines (83 loc) • 2.9 kB
JavaScript
const express = require('express');
const router = express.Router();
const { authMiddleware } = require('../middleware/auth');
const { Application, User } = require('../models');
// Получить все заявки пользователя
router.get('/', authMiddleware, async (req, res) => {
try {
const applications = await Application.findAll({
where: { userId: req.user.id },
order: [['createdAt', 'DESC']],
include: [{
model: User,
as: 'user',
attributes: ['fullName', 'email', 'phone']
}]
});
res.json(applications);
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Ошибка при получении заявок' });
}
});
// Создать новую заявку
router.post('/', authMiddleware, async (req, res) => {
try {
const { type, data } = req.body;
const application = await Application.create({
userId: req.user.id,
type,
data,
status: 'new'
});
res.status(201).json({
message: 'Заявка создана успешно',
application
});
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Ошибка при создании заявки' });
}
});
// Обновить заявку (для отзывов)
router.put('/:id', authMiddleware, async (req, res) => {
try {
const { id } = req.params;
const { rating, review } = req.body;
const application = await Application.findOne({
where: { id, userId: req.user.id }
});
if (!application) {
return res.status(404).json({ message: 'Заявка не найдена' });
}
// Проверка, что заявка завершена
if (application.status !== 'completed') {
return res.status(400).json({ message: 'Отзыв можно оставить только после завершения' });
}
await application.update({ rating, review });
res.json({
message: 'Отзыв добавлен',
application
});
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Ошибка при обновлении заявки' });
}
});
// Удалить заявку
router.delete('/:id', authMiddleware, async (req, res) => {
try {
const { id } = req.params;
const result = await Application.destroy({
where: { id, userId: req.user.id, status: 'new' }
});
if (result === 0) {
return res.status(404).json({ message: 'Заявка не найдена или не может быть удалена' });
}
res.json({ message: 'Заявка удалена' });
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Ошибка при удалении заявки' });
}
});
module.exports = router;