feat: Реализован полный CRUD для админ-панели и улучшена функциональность

- Portfolio CRUD: добавление, редактирование, удаление, переключение публикации
- Services CRUD: полное управление услугами с возможностью активации/деактивации
- Banner system: новая модель Banner с CRUD операциями и аналитикой кликов
- Telegram integration: расширенные настройки бота, обнаружение чатов, отправка сообщений
- Media management: улучшенная загрузка файлов с оптимизацией изображений и превью
- UI improvements: обновлённые админ-панели с rich-text редактором и drag&drop загрузкой
- Database: добавлена таблица banners с полями для баннеров и аналитики
This commit is contained in:
2025-10-22 20:32:16 +09:00
parent 150891b29d
commit 9477ff6de0
69 changed files with 11451 additions and 2321 deletions

View File

@@ -2,7 +2,7 @@ const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const { body, validationResult } = require('express-validator');
const User = require('../models/User');
const { User } = require('../models');
// Login validation rules
const loginValidation = [
@@ -25,7 +25,12 @@ router.post('/login', loginValidation, async (req, res) => {
const { email, password } = req.body;
// Find user
const user = await User.findOne({ email, isActive: true });
const user = await User.findOne({
where: {
email: email,
isActive: true
}
});
if (!user) {
return res.status(401).json({
success: false,
@@ -109,8 +114,9 @@ router.get('/me', async (req, res) => {
});
}
const user = await User.findById(req.session.user.id)
.select('-password');
const user = await User.findByPk(req.session.user.id, {
attributes: { exclude: ['password'] }
});
if (!user || !user.isActive) {
req.session.destroy();
@@ -163,7 +169,7 @@ router.put('/change-password', [
}
const { currentPassword, newPassword } = req.body;
const user = await User.findById(req.session.user.id);
const user = await User.findByPk(req.session.user.id);
if (!user) {
return res.status(404).json({