список пользователя
This commit is contained in:
179
api-user-lists.js
Normal file
179
api-user-lists.js
Normal file
@@ -0,0 +1,179 @@
|
||||
// api-user-lists.js - API для управления пользовательскими списками
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
|
||||
module.exports = function(app, db) {
|
||||
// Middleware для проверки аутентификации
|
||||
const requireAuth = (req, res, next) => {
|
||||
if (!req.session || !req.session.user) {
|
||||
return res.status(401).json({ error: 'Требуется аутентификация' });
|
||||
}
|
||||
next();
|
||||
};
|
||||
|
||||
// GET /api/user/lists – получить все списки текущего пользователя
|
||||
router.get('/api/user/lists', requireAuth, (req, res) => {
|
||||
const userId = req.session.user.id;
|
||||
|
||||
db.all(
|
||||
'SELECT id, name, user_ids, created_at, updated_at FROM user_lists WHERE user_id = ? ORDER BY created_at DESC',
|
||||
[userId],
|
||||
(err, rows) => {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка получения списков:', err);
|
||||
return res.status(500).json({ error: 'Ошибка получения списков' });
|
||||
}
|
||||
|
||||
// Преобразуем user_ids из JSON в массив
|
||||
const lists = (rows || []).map(row => ({
|
||||
...row,
|
||||
user_ids: JSON.parse(row.user_ids || '[]')
|
||||
}));
|
||||
|
||||
res.json(lists);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// POST /api/user/lists – создать новый список
|
||||
router.post('/api/user/lists', requireAuth, (req, res) => {
|
||||
const userId = req.session.user.id;
|
||||
const { name, userIds } = req.body;
|
||||
|
||||
if (!name || name.trim() === '') {
|
||||
return res.status(400).json({ error: 'Название списка обязательно' });
|
||||
}
|
||||
if (name.length > 35) {
|
||||
return res.status(400).json({ error: 'Название не должно превышать 35 символов' });
|
||||
}
|
||||
if (!Array.isArray(userIds)) {
|
||||
return res.status(400).json({ error: 'userIds должен быть массивом' });
|
||||
}
|
||||
|
||||
const user_ids_json = JSON.stringify(userIds);
|
||||
|
||||
db.run(
|
||||
'INSERT INTO user_lists (user_id, name, user_ids) VALUES (?, ?, ?)',
|
||||
[userId, name.trim(), user_ids_json],
|
||||
function(err) {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка создания списка:', err);
|
||||
return res.status(500).json({ error: 'Ошибка создания списка' });
|
||||
}
|
||||
|
||||
// Возвращаем созданный список
|
||||
db.get(
|
||||
'SELECT id, name, user_ids, created_at, updated_at FROM user_lists WHERE id = ?',
|
||||
[this.lastID],
|
||||
(err, row) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Список создан, но ошибка получения' });
|
||||
}
|
||||
const newList = {
|
||||
...row,
|
||||
user_ids: JSON.parse(row.user_ids || '[]')
|
||||
};
|
||||
res.status(201).json(newList);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// PUT /api/user/lists/:id – обновить список
|
||||
router.put('/api/user/lists/:id', requireAuth, (req, res) => {
|
||||
const listId = req.params.id;
|
||||
const userId = req.session.user.id;
|
||||
const { name, userIds } = req.body;
|
||||
|
||||
// Проверяем, принадлежит ли список пользователю
|
||||
db.get('SELECT id FROM user_lists WHERE id = ? AND user_id = ?', [listId, userId], (err, list) => {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка проверки списка:', err);
|
||||
return res.status(500).json({ error: 'Ошибка доступа' });
|
||||
}
|
||||
if (!list) {
|
||||
return res.status(404).json({ error: 'Список не найден' });
|
||||
}
|
||||
|
||||
const updates = [];
|
||||
const params = [];
|
||||
|
||||
if (name !== undefined) {
|
||||
if (name.trim() === '') {
|
||||
return res.status(400).json({ error: 'Название не может быть пустым' });
|
||||
}
|
||||
if (name.length > 35) {
|
||||
return res.status(400).json({ error: 'Название не должно превышать 35 символов' });
|
||||
}
|
||||
updates.push('name = ?');
|
||||
params.push(name.trim());
|
||||
}
|
||||
|
||||
if (userIds !== undefined) {
|
||||
if (!Array.isArray(userIds)) {
|
||||
return res.status(400).json({ error: 'userIds должен быть массивом' });
|
||||
}
|
||||
updates.push('user_ids = ?');
|
||||
params.push(JSON.stringify(userIds));
|
||||
}
|
||||
|
||||
if (updates.length === 0) {
|
||||
return res.status(400).json({ error: 'Нет данных для обновления' });
|
||||
}
|
||||
|
||||
updates.push('updated_at = CURRENT_TIMESTAMP');
|
||||
params.push(listId);
|
||||
|
||||
const query = `UPDATE user_lists SET ${updates.join(', ')} WHERE id = ?`;
|
||||
|
||||
db.run(query, params, function(err) {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка обновления списка:', err);
|
||||
return res.status(500).json({ error: 'Ошибка обновления списка' });
|
||||
}
|
||||
|
||||
// Возвращаем обновлённый список
|
||||
db.get(
|
||||
'SELECT id, name, user_ids, created_at, updated_at FROM user_lists WHERE id = ?',
|
||||
[listId],
|
||||
(err, row) => {
|
||||
if (err) {
|
||||
return res.status(500).json({ error: 'Список обновлён, но ошибка получения' });
|
||||
}
|
||||
const updatedList = {
|
||||
...row,
|
||||
user_ids: JSON.parse(row.user_ids || '[]')
|
||||
};
|
||||
res.json(updatedList);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// DELETE /api/user/lists/:id – удалить список
|
||||
router.delete('/api/user/lists/:id', requireAuth, (req, res) => {
|
||||
const listId = req.params.id;
|
||||
const userId = req.session.user.id;
|
||||
|
||||
db.run(
|
||||
'DELETE FROM user_lists WHERE id = ? AND user_id = ?',
|
||||
[listId, userId],
|
||||
function(err) {
|
||||
if (err) {
|
||||
console.error('❌ Ошибка удаления списка:', err);
|
||||
return res.status(500).json({ error: 'Ошибка удаления списка' });
|
||||
}
|
||||
if (this.changes === 0) {
|
||||
return res.status(404).json({ error: 'Список не найден' });
|
||||
}
|
||||
res.json({ success: true, message: 'Список удалён' });
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
// Подключаем роутер к приложению
|
||||
app.use(router);
|
||||
console.log('✅ API для пользовательских списков подключено');
|
||||
};
|
||||
Reference in New Issue
Block a user