Очистка проекта от устаревшей документации и исправление логики миграции базы данных
Удалены устаревшие файлы документации (CHANGES.md, COMMANDS.md, DEBUG.md, OFFLINE_FIX.md, QUICK_START.md, README_RU.md), конфигурационные файлы .cursor и скрипты установки/запуска (install.sh, start.sh). Исправлена логика миграции в backend/server.js: теперь is_public_profile обновляется только для пользователей с NULL значением, а не для всех пользователей с 0, что предотвращает нежелательное изменение явно установленных значений. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
3346fae87d
commit
12c0870c8f
@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
не забывай использовать MCP сервера
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
alwaysApply: true
|
|
||||||
---
|
|
||||||
|
|
||||||
Never try to start the server yourself. If it is required, then ask me to do it!
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"setup-worktree": [
|
|
||||||
"npm install"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
157
CHANGES.md
157
CHANGES.md
@ -1,157 +0,0 @@
|
|||||||
# Список изменений - NoteJS React
|
|
||||||
|
|
||||||
## Структура проекта
|
|
||||||
|
|
||||||
Проект реорганизован для независимой работы фронтенда и бэкенда:
|
|
||||||
|
|
||||||
### ✅ Backend (Node.js + Express)
|
|
||||||
|
|
||||||
**Расположение:** `backend/`
|
|
||||||
|
|
||||||
**Что сделано:**
|
|
||||||
|
|
||||||
- ✅ Скопирован `server.js` из корня проекта
|
|
||||||
- ✅ Скопированы `package.json` и `package-lock.json`
|
|
||||||
- ✅ Изменён порт с `3000` на `3001` (чтобы не конфликтовать со старым приложением)
|
|
||||||
- ✅ Установлены все зависимости (`npm install`)
|
|
||||||
- ✅ Созданы папки:
|
|
||||||
- `database/` - для SQLite баз данных
|
|
||||||
- `public/uploads/` - для загруженных файлов
|
|
||||||
- ✅ Создан `.gitignore` для исключения ненужных файлов
|
|
||||||
- ✅ Создан `README.md` с инструкциями
|
|
||||||
|
|
||||||
**Запуск:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
**Адрес:** http://localhost:3001
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### ✅ Frontend (React + TypeScript)
|
|
||||||
|
|
||||||
**Расположение:** `src/`
|
|
||||||
|
|
||||||
**Что сделано:**
|
|
||||||
|
|
||||||
- ✅ Обновлён `vite.config.ts`:
|
|
||||||
- Порт изменён на `5173` (стандартный для Vite)
|
|
||||||
- Настроен proxy для API запросов к бэкенду (`http://localhost:3001`)
|
|
||||||
- Добавлены proxy правила для `/api`, `/uploads`, `/logout`
|
|
||||||
- ✅ Обновлён `package.json`:
|
|
||||||
- Добавлен скрипт `server` для запуска бэкенда
|
|
||||||
- Добавлен скрипт `dev:all` для одновременного запуска фронтенда и бэкенда
|
|
||||||
- Добавлен скрипт `start` как алиас для `dev:all`
|
|
||||||
- Установлен пакет `concurrently` для параллельного запуска
|
|
||||||
|
|
||||||
**Запуск только фронтенда:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
**Адрес:** http://localhost:5173
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Запуск всего приложения
|
|
||||||
|
|
||||||
### Вариант 1: Одна команда (рекомендуется)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
Это запустит фронтенд и бэкенд одновременно.
|
|
||||||
|
|
||||||
### Вариант 2: Раздельный запуск
|
|
||||||
|
|
||||||
**Терминал 1 (Backend):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
**Терминал 2 (Frontend):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📋 Установка зависимостей
|
|
||||||
|
|
||||||
### Первый раз:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Фронтенд
|
|
||||||
npm install
|
|
||||||
|
|
||||||
# Бэкенд
|
|
||||||
cd backend
|
|
||||||
npm install
|
|
||||||
cd ..
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Конфигурация
|
|
||||||
|
|
||||||
### Backend (.env)
|
|
||||||
|
|
||||||
Создайте файл `backend/.env`:
|
|
||||||
|
|
||||||
```env
|
|
||||||
PORT=3001
|
|
||||||
SESSION_SECRET=your-secret-key-here
|
|
||||||
NODE_ENV=development
|
|
||||||
ENCRYPTION_KEY=your-encryption-key-min-32-chars
|
|
||||||
```
|
|
||||||
|
|
||||||
**Важно:** `ENCRYPTION_KEY` используется для шифрования заметок в базе данных. Используйте надежный случайный ключ минимум 32 символа!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📍 Порты
|
|
||||||
|
|
||||||
- **Frontend (dev):** http://localhost:5173
|
|
||||||
- **Backend (новый):** http://localhost:3001
|
|
||||||
- **Старое приложение:** http://localhost:3000 (если запущено)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ✨ Преимущества новой структуры
|
|
||||||
|
|
||||||
1. **Независимость:** Фронтенд и бэкенд могут разрабатываться и деплоиться независимо
|
|
||||||
2. **Современный стек:** Vite для быстрой разработки фронтенда
|
|
||||||
3. **Hot Reload:** Автоматическая перезагрузка при изменениях
|
|
||||||
4. **TypeScript:** Типизация на фронтенде
|
|
||||||
5. **Proxy:** Нет проблем с CORS в разработке
|
|
||||||
6. **Раздельные зависимости:** Чистое разделение фронтенд/бэкенд зависимостей
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📖 Документация
|
|
||||||
|
|
||||||
- [QUICK_START.md](QUICK_START.md) - Быстрый старт
|
|
||||||
- [README_RU.md](README_RU.md) - Полная документация на русском
|
|
||||||
- [backend/README.md](backend/README.md) - Документация бэкенда
|
|
||||||
- [DEBUG.md](DEBUG.md) - Отладка и решение проблем
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Совместимость со старым приложением
|
|
||||||
|
|
||||||
Старое приложение (порт 3000) и новое (порты 5173 + 3001) могут работать одновременно.
|
|
||||||
|
|
||||||
**База данных:** Оба приложения используют разные базы данных:
|
|
||||||
|
|
||||||
- Старое: `/database/notes.db`
|
|
||||||
- Новое: `/backend/database/notes.db`
|
|
||||||
|
|
||||||
Если нужно использовать общую базу, можно скопировать файлы из `/database/` в `/backend/database/`.
|
|
||||||
192
COMMANDS.md
192
COMMANDS.md
@ -1,192 +0,0 @@
|
|||||||
# Команды NoteJS React
|
|
||||||
|
|
||||||
## 🔧 Установка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Автоматическая установка всех зависимостей
|
|
||||||
./install.sh
|
|
||||||
|
|
||||||
# Или вручную:
|
|
||||||
npm install # Фронтенд
|
|
||||||
cd backend && npm install # Бэкенд
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🚀 Запуск
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Запуск всего приложения (рекомендуется)
|
|
||||||
./start.sh
|
|
||||||
# или
|
|
||||||
npm start
|
|
||||||
# или
|
|
||||||
npm run dev:all
|
|
||||||
|
|
||||||
# Только фронтенд
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# Только бэкенд
|
|
||||||
npm run server
|
|
||||||
# или
|
|
||||||
cd backend && npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🏗️ Сборка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Production сборка
|
|
||||||
npm run build
|
|
||||||
|
|
||||||
# Предпросмотр production сборки
|
|
||||||
npm run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🧹 Разработка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверка кода (линтинг)
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📂 Структура команд
|
|
||||||
|
|
||||||
### Package.json (корень)
|
|
||||||
|
|
||||||
- `npm run dev` - Запуск Vite dev сервера (фронтенд)
|
|
||||||
- `npm run build` - Сборка production версии
|
|
||||||
- `npm run preview` - Предпросмотр production сборки
|
|
||||||
- `npm run lint` - Проверка кода
|
|
||||||
- `npm run server` - Запуск бэкенда
|
|
||||||
- `npm run dev:all` - Запуск фронтенда и бэкенда одновременно
|
|
||||||
- `npm start` - Алиас для `dev:all`
|
|
||||||
|
|
||||||
### Backend/package.json
|
|
||||||
|
|
||||||
- `npm start` - Запуск сервера
|
|
||||||
- `npm run dev` - Запуск с nodemon (auto-reload)
|
|
||||||
|
|
||||||
## 🌐 Адреса
|
|
||||||
|
|
||||||
После запуска приложение доступно по адресам:
|
|
||||||
|
|
||||||
- **Frontend (dev):** http://localhost:5173
|
|
||||||
- **Backend API:** http://localhost:3001
|
|
||||||
- **Старая версия:** http://localhost:3000 (если запущена)
|
|
||||||
|
|
||||||
## 🔑 Переменные окружения
|
|
||||||
|
|
||||||
### Backend (.env)
|
|
||||||
|
|
||||||
Создайте файл `backend/.env`:
|
|
||||||
|
|
||||||
```env
|
|
||||||
PORT=3001
|
|
||||||
SESSION_SECRET=ваш-секретный-ключ
|
|
||||||
NODE_ENV=development
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📝 Примеры использования
|
|
||||||
|
|
||||||
### Первый запуск
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Клонирование репозитория
|
|
||||||
git clone <repo-url>
|
|
||||||
cd notejs-react
|
|
||||||
|
|
||||||
# 2. Установка зависимостей
|
|
||||||
./install.sh
|
|
||||||
|
|
||||||
# 3. Настройка бэкенда (создать .env)
|
|
||||||
nano backend/.env
|
|
||||||
|
|
||||||
# 4. Запуск
|
|
||||||
./start.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### Разработка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Терминал 1: Backend с auto-reload
|
|
||||||
cd backend
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# Терминал 2: Frontend с hot-reload
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Production
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 1. Сборка фронтенда
|
|
||||||
npm run build
|
|
||||||
|
|
||||||
# 2. Запуск бэкенда
|
|
||||||
cd backend
|
|
||||||
NODE_ENV=production npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🐛 Отладка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверка портов
|
|
||||||
lsof -i :3001 # Backend
|
|
||||||
lsof -i :5173 # Frontend
|
|
||||||
|
|
||||||
# Логи бэкенда
|
|
||||||
cd backend
|
|
||||||
npm start
|
|
||||||
|
|
||||||
# Логи фронтенда
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔄 Работа с базой данных
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Просмотр базы данных (SQLite)
|
|
||||||
sqlite3 backend/database/notes.db
|
|
||||||
|
|
||||||
# Создание резервной копии
|
|
||||||
cp backend/database/notes.db backend/database/notes.db.backup
|
|
||||||
|
|
||||||
# Восстановление
|
|
||||||
cp backend/database/notes.db.backup backend/database/notes.db
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📦 Обновление зависимостей
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверка устаревших пакетов (фронтенд)
|
|
||||||
npm outdated
|
|
||||||
|
|
||||||
# Обновление (фронтенд)
|
|
||||||
npm update
|
|
||||||
|
|
||||||
# Проверка устаревших пакетов (бэкенд)
|
|
||||||
cd backend
|
|
||||||
npm outdated
|
|
||||||
npm update
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🧪 Тестирование
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# В будущем здесь будут команды для тестов
|
|
||||||
# npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📋 Git
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Статус
|
|
||||||
git status
|
|
||||||
|
|
||||||
# Добавить изменения
|
|
||||||
git add .
|
|
||||||
|
|
||||||
# Коммит
|
|
||||||
git commit -m "Описание изменений"
|
|
||||||
|
|
||||||
# Отправка
|
|
||||||
git push
|
|
||||||
```
|
|
||||||
70
DEBUG.md
70
DEBUG.md
@ -1,70 +0,0 @@
|
|||||||
# Инструкция по отладке подключения к backend
|
|
||||||
|
|
||||||
## Проблема: "Ошибка соединения с сервером"
|
|
||||||
|
|
||||||
### Шаг 1: Проверьте, запущен ли backend сервер
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# В корне проекта NoteJS
|
|
||||||
cd /home/fovway/git/NoteJS
|
|
||||||
npm start
|
|
||||||
# или
|
|
||||||
node server.js
|
|
||||||
```
|
|
||||||
|
|
||||||
Backend должен быть запущен на порту 3000. Проверьте:
|
|
||||||
|
|
||||||
- В консоли должно быть: "Сервер запущен на порту 3000"
|
|
||||||
- В браузере: http://localhost:3000 должен открываться
|
|
||||||
|
|
||||||
### Шаг 2: Проверьте консоль браузера
|
|
||||||
|
|
||||||
Откройте DevTools (F12) и посмотрите в консоль:
|
|
||||||
|
|
||||||
- Если видите "API Request: POST /api/login" - запрос отправляется
|
|
||||||
- Если видите "Network error - server might be down or proxy not working" - backend не отвечает
|
|
||||||
- Если видите ошибку CORS - проблема с настройками сервера
|
|
||||||
|
|
||||||
### Шаг 3: Проверьте прокси Vite
|
|
||||||
|
|
||||||
Vite dev server (порт 3001) должен проксировать запросы на `/api` на `http://localhost:3000`.
|
|
||||||
|
|
||||||
Убедитесь что в `vite.config.ts`:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
proxy: {
|
|
||||||
"/api": {
|
|
||||||
target: "http://localhost:3000",
|
|
||||||
changeOrigin: true,
|
|
||||||
secure: false,
|
|
||||||
ws: true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Шаг 4: Проверьте сетевые запросы
|
|
||||||
|
|
||||||
В DevTools > Network:
|
|
||||||
|
|
||||||
- Запрос должен быть на `http://localhost:3001/api/login` (не 3000!)
|
|
||||||
- Статус должен быть 200 или 400/401 (не ошибка сети)
|
|
||||||
|
|
||||||
### Шаг 5: Проверьте сессии
|
|
||||||
|
|
||||||
Backend использует cookies для сессий. Убедитесь что:
|
|
||||||
|
|
||||||
- `withCredentials: true` в axios клиенте
|
|
||||||
- Backend настроен для работы с cookies
|
|
||||||
|
|
||||||
### Типичные ошибки:
|
|
||||||
|
|
||||||
1. **"Сервер не отвечает"** - backend не запущен
|
|
||||||
2. **CORS ошибка** - проверьте настройки CORS в server.js
|
|
||||||
3. **404 Not Found** - неправильный URL или прокси не работает
|
|
||||||
4. **Network Error** - backend не доступен или прокси не настроен
|
|
||||||
|
|
||||||
### Быстрое решение:
|
|
||||||
|
|
||||||
1. Убедитесь что backend запущен: `cd /home/fovway/git/NoteJS && npm start`
|
|
||||||
2. Перезапустите Vite dev server: `cd notejs-react && npm run dev`
|
|
||||||
3. Откройте браузер и проверьте консоль для деталей ошибки
|
|
||||||
131
OFFLINE_FIX.md
131
OFFLINE_FIX.md
@ -1,131 +0,0 @@
|
|||||||
# Исправление проблемы с оффлайн режимом
|
|
||||||
|
|
||||||
## Проблема
|
|
||||||
При обновлении страницы в оффлайн режиме попеременно показывается сообщение "нет подключения к интернету" и нормальное отображение приложения.
|
|
||||||
|
|
||||||
## Причина
|
|
||||||
Service Worker использовал стратегию, которая пыталась обратиться к сети перед использованием кэша, что приводило к показу страницы ошибки браузера при отсутствии подключения.
|
|
||||||
|
|
||||||
## Решение
|
|
||||||
Внесены изменения в `vite.config.ts` для обеспечения стабильной работы в оффлайн режиме:
|
|
||||||
|
|
||||||
### 1. Стратегия CacheFirst для навигационных запросов
|
|
||||||
Теперь при обновлении страницы Service Worker **сразу** загружает кэшированную версию без попыток обращения к сети:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
{
|
|
||||||
urlPattern: ({ request }) => request.mode === 'navigate',
|
|
||||||
handler: "CacheFirst",
|
|
||||||
options: {
|
|
||||||
cacheName: "pages-cache",
|
|
||||||
expiration: {
|
|
||||||
maxEntries: 10,
|
|
||||||
maxAgeSeconds: 7 * 24 * 60 * 60, // 7 days
|
|
||||||
},
|
|
||||||
cacheableResponse: {
|
|
||||||
statuses: [0, 200],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Дополнительное кэширование HTML файлов
|
|
||||||
Добавлено специальное правило для всех HTML файлов:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
{
|
|
||||||
urlPattern: /\.html$/,
|
|
||||||
handler: "CacheFirst",
|
|
||||||
options: {
|
|
||||||
cacheName: "html-cache",
|
|
||||||
expiration: {
|
|
||||||
maxEntries: 10,
|
|
||||||
maxAgeSeconds: 7 * 24 * 60 * 60,
|
|
||||||
},
|
|
||||||
cacheableResponse: {
|
|
||||||
statuses: [0, 200],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Автоматическое обновление Service Worker
|
|
||||||
Изменен тип регистрации с `"prompt"` на `"autoUpdate"` для обеспечения автоматического обновления SW без запроса пользователя:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
registerType: "autoUpdate"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Отключение Navigation Preload
|
|
||||||
Добавлена настройка `navigationPreload: false` для предотвращения попыток загрузки из сети при навигации.
|
|
||||||
|
|
||||||
## Как применить изменения
|
|
||||||
|
|
||||||
### 1. Пересборка проекта
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Копирование файлов на сервер
|
|
||||||
После успешной сборки скопируйте содержимое папки `dist/` в `backend/public/`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Windows PowerShell
|
|
||||||
Remove-Item -Recurse -Force backend/public/*
|
|
||||||
Copy-Item -Recurse dist/* backend/public/
|
|
||||||
|
|
||||||
# Linux/Mac
|
|
||||||
rm -rf backend/public/*
|
|
||||||
cp -r dist/* backend/public/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Запуск сервера
|
|
||||||
Запустите сервер (или попросите это сделать):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Проверка работы
|
|
||||||
1. Откройте приложение в браузере
|
|
||||||
2. Дождитесь полной загрузки приложения
|
|
||||||
3. Откройте DevTools → Application → Service Workers
|
|
||||||
4. Убедитесь, что новый Service Worker активирован
|
|
||||||
5. Переключите браузер в оффлайн режим (DevTools → Network → Offline)
|
|
||||||
6. Обновите страницу несколько раз - приложение должно загружаться из кэша каждый раз
|
|
||||||
|
|
||||||
### 5. Очистка старого кэша (если необходимо)
|
|
||||||
Если проблема все еще возникает, попробуйте:
|
|
||||||
1. DevTools → Application → Clear storage → Clear site data
|
|
||||||
2. Закройте и откройте браузер заново
|
|
||||||
3. Перейдите на сайт снова - новый SW установится и закэширует все ресурсы
|
|
||||||
4. Проверьте работу в оффлайн режиме
|
|
||||||
|
|
||||||
## Технические детали
|
|
||||||
|
|
||||||
### Стратегии кэширования
|
|
||||||
|
|
||||||
**CacheFirst (Cache First, Network Fallback)**
|
|
||||||
- Сначала проверяется кэш
|
|
||||||
- Если ресурс найден в кэше, он возвращается немедленно
|
|
||||||
- Если ресурса нет в кэше, делается запрос к сети
|
|
||||||
- Идеально для статических ресурсов и оффлайн работы
|
|
||||||
|
|
||||||
**NetworkFirst** (используется для API)
|
|
||||||
- Сначала пытается загрузить из сети
|
|
||||||
- Если сеть недоступна или таймаут, возвращается кэшированная версия
|
|
||||||
- Идеально для данных, которые должны быть актуальными
|
|
||||||
|
|
||||||
### Настройки Service Worker
|
|
||||||
- `skipWaiting: true` - новый SW активируется немедленно
|
|
||||||
- `clientsClaim: true` - новый SW берет контроль над всеми открытыми страницами
|
|
||||||
- `cleanupOutdatedCaches: true` - автоматическая очистка устаревших кэшей
|
|
||||||
|
|
||||||
## Ожидаемый результат
|
|
||||||
После применения изменений приложение будет:
|
|
||||||
- ✅ Всегда загружаться из кэша в оффлайн режиме
|
|
||||||
- ✅ Не показывать страницу "нет подключения к интернету"
|
|
||||||
- ✅ Работать стабильно при любом количестве обновлений страницы
|
|
||||||
- ✅ Автоматически обновлять Service Worker без запроса пользователя
|
|
||||||
|
|
||||||
144
QUICK_START.md
144
QUICK_START.md
@ -1,144 +0,0 @@
|
|||||||
# Быстрый старт NoteJS React
|
|
||||||
|
|
||||||
## 🚀 Первый запуск
|
|
||||||
|
|
||||||
### 1. Установка всех зависимостей
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Установка зависимостей фронтенда
|
|
||||||
npm install
|
|
||||||
|
|
||||||
# Установка зависимостей бэкенда
|
|
||||||
cd backend && npm install && cd ..
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Запуск приложения
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Запуск фронтенда и бэкенда одновременно
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
Приложение будет доступно по адресу: **http://localhost:5173**
|
|
||||||
|
|
||||||
⚠️ **ВАЖНО:** Открывайте именно **http://localhost:5173** (Frontend), а НЕ http://localhost:3001 (Backend API)
|
|
||||||
|
|
||||||
## 🏗️ Архитектура
|
|
||||||
|
|
||||||
Приложение разделено на два независимых сервера:
|
|
||||||
|
|
||||||
1. **Frontend (React + Vite)** - порт 5173
|
|
||||||
|
|
||||||
- Отображает интерфейс пользователя
|
|
||||||
- Обрабатывает роутинг
|
|
||||||
- Проксирует API запросы к бэкенду
|
|
||||||
|
|
||||||
2. **Backend (Node.js + Express)** - порт 3001
|
|
||||||
- Предоставляет REST API
|
|
||||||
- Работает с базой данных
|
|
||||||
- Обрабатывает аутентификацию
|
|
||||||
- Хранит файлы и изображения
|
|
||||||
|
|
||||||
**Как это работает:**
|
|
||||||
|
|
||||||
- Вы открываете http://localhost:5173
|
|
||||||
- Frontend отображает интерфейс
|
|
||||||
- При запросе данных Frontend обращается к Backend API
|
|
||||||
- Backend обрабатывает запрос и возвращает данные
|
|
||||||
|
|
||||||
## 📋 Полезные команды
|
|
||||||
|
|
||||||
### Запуск
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Запуск всего приложения (фронтенд + бэкенд)
|
|
||||||
npm start
|
|
||||||
# или
|
|
||||||
npm run dev:all
|
|
||||||
|
|
||||||
# Запуск только фронтенда
|
|
||||||
npm run dev
|
|
||||||
|
|
||||||
# Запуск только бэкенда
|
|
||||||
npm run server
|
|
||||||
# или
|
|
||||||
cd backend && npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
### Сборка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Production сборка фронтенда
|
|
||||||
npm run build
|
|
||||||
|
|
||||||
# Предпросмотр production сборки
|
|
||||||
npm run preview
|
|
||||||
```
|
|
||||||
|
|
||||||
### Разработка
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверка кода (линтинг)
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔧 Первоначальная настройка
|
|
||||||
|
|
||||||
### 1. Настройка бэкенда
|
|
||||||
|
|
||||||
Создайте файл `backend/.env`:
|
|
||||||
|
|
||||||
```env
|
|
||||||
PORT=3001
|
|
||||||
SESSION_SECRET=замените-на-свой-секретный-ключ
|
|
||||||
NODE_ENV=development
|
|
||||||
ENCRYPTION_KEY=замените-на-свой-ключ-минимум-32-символа
|
|
||||||
```
|
|
||||||
|
|
||||||
**Важно:** `ENCRYPTION_KEY` используется для шифрования заметок в базе данных. Используйте надежный случайный ключ минимум 32 символа!
|
|
||||||
|
|
||||||
### 2. Первый пользователь
|
|
||||||
|
|
||||||
1. Откройте http://localhost:5173
|
|
||||||
2. Перейдите на страницу регистрации
|
|
||||||
3. Создайте учетную запись
|
|
||||||
|
|
||||||
### 3. Настройка AI (опционально)
|
|
||||||
|
|
||||||
1. Войдите в приложение
|
|
||||||
2. Перейдите в "Настройки"
|
|
||||||
3. Вкладка "AI настройки"
|
|
||||||
4. Введите:
|
|
||||||
- API ключ
|
|
||||||
- Base URL (например: `https://api.openai.com/v1/`)
|
|
||||||
- Модель (например: `gpt-3.5-turbo`)
|
|
||||||
5. Включите "Включить AI функционал"
|
|
||||||
|
|
||||||
## 📍 Адреса
|
|
||||||
|
|
||||||
- **Фронтенд (dev)**: http://localhost:5173
|
|
||||||
- **Бэкенд API**: http://localhost:3001
|
|
||||||
- **Старая версия**: http://localhost:3000 (если запущена)
|
|
||||||
|
|
||||||
## ❓ Проблемы
|
|
||||||
|
|
||||||
### Порт уже занят
|
|
||||||
|
|
||||||
Если порт 3001 или 5173 занят:
|
|
||||||
|
|
||||||
1. Измените порт в `backend/.env` (для бэкенда)
|
|
||||||
2. Измените порт в `vite.config.ts` (для фронтенда)
|
|
||||||
|
|
||||||
### База данных не создается
|
|
||||||
|
|
||||||
Проверьте, что папка `backend/database/` существует и доступна для записи.
|
|
||||||
|
|
||||||
### Не загружаются файлы
|
|
||||||
|
|
||||||
Проверьте, что папка `backend/public/uploads/` существует и доступна для записи.
|
|
||||||
|
|
||||||
## 📖 Документация
|
|
||||||
|
|
||||||
Полная документация в файле [README_RU.md](README_RU.md)
|
|
||||||
|
|
||||||
Backend документация: [backend/README.md](backend/README.md)
|
|
||||||
204
README_RU.md
204
README_RU.md
@ -1,204 +0,0 @@
|
|||||||
# NoteJS React - Приложение для заметок
|
|
||||||
|
|
||||||
Современное PWA приложение для ведения заметок с поддержкой Markdown, изображений, файлов и AI.
|
|
||||||
|
|
||||||
## Структура проекта
|
|
||||||
|
|
||||||
```
|
|
||||||
notejs-react/
|
|
||||||
├── backend/ # Backend сервер (Node.js + Express)
|
|
||||||
│ ├── database/ # SQLite базы данных
|
|
||||||
│ ├── public/ # Статические файлы и загрузки
|
|
||||||
│ ├── server.js # Основной файл сервера
|
|
||||||
│ └── package.json # Зависимости бэкенда
|
|
||||||
├── src/ # Frontend исходники (React + TypeScript)
|
|
||||||
│ ├── api/ # API клиенты
|
|
||||||
│ ├── components/ # React компоненты
|
|
||||||
│ ├── hooks/ # Кастомные хуки
|
|
||||||
│ ├── pages/ # Страницы приложения
|
|
||||||
│ ├── store/ # Redux store
|
|
||||||
│ ├── styles/ # CSS стили
|
|
||||||
│ ├── types/ # TypeScript типы
|
|
||||||
│ └── utils/ # Утилиты
|
|
||||||
├── public/ # Публичные файлы (иконки, манифест)
|
|
||||||
└── package.json # Зависимости фронтенда
|
|
||||||
```
|
|
||||||
|
|
||||||
## Установка
|
|
||||||
|
|
||||||
### 1. Установка зависимостей фронтенда
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Установка зависимостей бэкенда
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
npm install
|
|
||||||
cd ..
|
|
||||||
```
|
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
### Вариант 1: Запуск всего приложения (рекомендуется)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
или
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev:all
|
|
||||||
```
|
|
||||||
|
|
||||||
Это запустит:
|
|
||||||
|
|
||||||
- **Frontend** на `http://localhost:5173`
|
|
||||||
- **Backend** на `http://localhost:3001`
|
|
||||||
|
|
||||||
### Вариант 2: Раздельный запуск
|
|
||||||
|
|
||||||
**Frontend:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
**Backend (в отдельном терминале):**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run server
|
|
||||||
```
|
|
||||||
|
|
||||||
или
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd backend
|
|
||||||
npm start
|
|
||||||
```
|
|
||||||
|
|
||||||
## Функционал
|
|
||||||
|
|
||||||
### ✨ Основные возможности
|
|
||||||
|
|
||||||
- 📝 Создание и редактирование заметок с Markdown
|
|
||||||
- 🖼️ Загрузка изображений к заметкам
|
|
||||||
- 📎 Прикрепление файлов (PDF, DOC, XLS, ZIP и др.)
|
|
||||||
- 📌 Закрепление важных заметок
|
|
||||||
- 📦 Архивация заметок
|
|
||||||
- 🔍 Поиск по заметкам и тегам
|
|
||||||
- 📅 Календарь заметок
|
|
||||||
- 🏷️ Система тегов
|
|
||||||
- 🌓 Светлая/тёмная тема
|
|
||||||
- 🎨 Настройка цветовой схемы
|
|
||||||
- 👤 Профили пользователей с аватарами
|
|
||||||
|
|
||||||
### 🤖 AI функционал
|
|
||||||
|
|
||||||
- Улучшение текста заметок
|
|
||||||
- Исправление ошибок
|
|
||||||
- Генерация контента
|
|
||||||
- Настройка собственного OpenAI-совместимого API
|
|
||||||
|
|
||||||
### 📱 PWA
|
|
||||||
|
|
||||||
- Установка как приложение
|
|
||||||
- Работа офлайн (Service Worker)
|
|
||||||
- Push-уведомления (опционально)
|
|
||||||
- Адаптивный дизайн для всех устройств
|
|
||||||
|
|
||||||
### Markdown поддержка
|
|
||||||
|
|
||||||
- Заголовки (H1-H5)
|
|
||||||
- **Жирный** и _курсив_
|
|
||||||
- Списки (маркированные и нумерованные)
|
|
||||||
- ~~Зачеркнутый текст~~
|
|
||||||
- [Ссылки](https://example.com)
|
|
||||||
- `Код` и блоки кода
|
|
||||||
- Todo списки с чекбоксами
|
|
||||||
- ||Спойлеры||
|
|
||||||
- Внешние ссылки
|
|
||||||
|
|
||||||
## Технологии
|
|
||||||
|
|
||||||
### Frontend
|
|
||||||
|
|
||||||
- React 18
|
|
||||||
- TypeScript
|
|
||||||
- Redux Toolkit
|
|
||||||
- React Router
|
|
||||||
- Vite
|
|
||||||
- Axios
|
|
||||||
- Marked (Markdown)
|
|
||||||
- Iconify
|
|
||||||
|
|
||||||
### Backend
|
|
||||||
|
|
||||||
- Node.js
|
|
||||||
- Express
|
|
||||||
- SQLite3
|
|
||||||
- Bcrypt
|
|
||||||
- Multer
|
|
||||||
- Express Session
|
|
||||||
- Helmet
|
|
||||||
|
|
||||||
## Разработка
|
|
||||||
|
|
||||||
### Сборка production версии
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
Собранные файлы будут в папке `dist/`.
|
|
||||||
|
|
||||||
### Проверка типов
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
## Конфигурация
|
|
||||||
|
|
||||||
### Backend (.env)
|
|
||||||
|
|
||||||
Создайте файл `backend/.env`:
|
|
||||||
|
|
||||||
```env
|
|
||||||
PORT=3001
|
|
||||||
SESSION_SECRET=your-secret-key-here
|
|
||||||
NODE_ENV=development
|
|
||||||
ENCRYPTION_KEY=your-encryption-key-min-32-chars
|
|
||||||
```
|
|
||||||
|
|
||||||
**Важно:**
|
|
||||||
- `ENCRYPTION_KEY` - ключ для шифрования заметок в базе данных (минимум 32 символа)
|
|
||||||
- В продакшене ОБЯЗАТЕЛЬНО используйте надежный случайный ключ
|
|
||||||
- Не используйте дефолтный ключ в продакшене!
|
|
||||||
|
|
||||||
### AI настройки
|
|
||||||
|
|
||||||
Настройки AI выполняются через интерфейс приложения в разделе "Настройки".
|
|
||||||
|
|
||||||
Требуется:
|
|
||||||
|
|
||||||
- OpenAI API Key (или ключ совместимого API)
|
|
||||||
- Base URL (например, `https://api.openai.com/v1/`)
|
|
||||||
- Модель (например, `gpt-3.5-turbo`)
|
|
||||||
|
|
||||||
## Порты
|
|
||||||
|
|
||||||
- **Frontend (dev)**: `http://localhost:5173`
|
|
||||||
- **Backend**: `http://localhost:3001`
|
|
||||||
- **Старое приложение**: `http://localhost:3000` (если запущено)
|
|
||||||
|
|
||||||
## Лицензия
|
|
||||||
|
|
||||||
ISC
|
|
||||||
|
|
||||||
## Автор
|
|
||||||
|
|
||||||
NoteJS Team
|
|
||||||
@ -625,18 +625,18 @@ function runMigrations() {
|
|||||||
console.log(
|
console.log(
|
||||||
"Колонка is_public_profile добавлена в таблицу users"
|
"Колонка is_public_profile добавлена в таблицу users"
|
||||||
);
|
);
|
||||||
// Устанавливаем is_public_profile = 1 для всех существующих пользователей
|
// Только для NULL значений устанавливаем DEFAULT (1)
|
||||||
db.run(
|
db.run(
|
||||||
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL OR is_public_profile = 0",
|
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL",
|
||||||
(updateErr) => {
|
(updateErr) => {
|
||||||
if (updateErr) {
|
if (updateErr) {
|
||||||
console.error(
|
console.error(
|
||||||
"Ошибка обновления is_public_profile для существующих пользователей:",
|
"Ошибка обновления is_public_profile для пользователей с NULL:",
|
||||||
updateErr.message
|
updateErr.message
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
console.log(
|
console.log(
|
||||||
"is_public_profile установлен в 1 для всех существующих пользователей"
|
"is_public_profile установлен в 1 для пользователей с NULL"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -644,23 +644,6 @@ function runMigrations() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
// Если колонка уже существует, обновляем существующих пользователей с NULL или 0
|
|
||||||
db.run(
|
|
||||||
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL OR is_public_profile = 0",
|
|
||||||
(updateErr) => {
|
|
||||||
if (updateErr) {
|
|
||||||
console.error(
|
|
||||||
"Ошибка обновления is_public_profile для существующих пользователей:",
|
|
||||||
updateErr.message
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
console.log(
|
|
||||||
"is_public_profile установлен в 1 для всех существующих пользователей"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -82,7 +82,7 @@ define(['./workbox-47da91e0'], (function (workbox) { 'use strict';
|
|||||||
"revision": "3ca0b8505b4bec776b69afdba2768812"
|
"revision": "3ca0b8505b4bec776b69afdba2768812"
|
||||||
}, {
|
}, {
|
||||||
"url": "/index.html",
|
"url": "/index.html",
|
||||||
"revision": "0.rkgg11egm7o"
|
"revision": "0.unrihnsl5to"
|
||||||
}], {
|
}], {
|
||||||
"ignoreURLParametersMatching": [/^utm_/, /^fbclid$/]
|
"ignoreURLParametersMatching": [/^utm_/, /^fbclid$/]
|
||||||
});
|
});
|
||||||
|
|||||||
36
install.sh
36
install.sh
@ -1,36 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Скрипт для установки всех зависимостей NoteJS React
|
|
||||||
|
|
||||||
echo "📦 Установка зависимостей NoteJS React..."
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Установка зависимостей фронтенда
|
|
||||||
echo "1️⃣ Установка зависимостей фронтенда..."
|
|
||||||
npm install
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "❌ Ошибка установки зависимостей фронтенда"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "2️⃣ Установка зависимостей бэкенда..."
|
|
||||||
cd backend
|
|
||||||
npm install
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "❌ Ошибка установки зависимостей бэкенда"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "✅ Все зависимости успешно установлены!"
|
|
||||||
echo ""
|
|
||||||
echo "Для запуска приложения выполните:"
|
|
||||||
echo " npm start"
|
|
||||||
echo "или"
|
|
||||||
echo " ./start.sh"
|
|
||||||
|
|
||||||
154
review.md
Normal file
154
review.md
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
● Проведено полное ревью кода вашего приложения. Вот краткое резюме найденных проблем:
|
||||||
|
|
||||||
|
🔴 КРИТИЧЕСКИЕ УЯЗВИМОСТИ БЕЗОПАСНОСТИ
|
||||||
|
|
||||||
|
1. Hardcoded Secrets в репозитории ⚠️ CRITICAL
|
||||||
|
|
||||||
|
Файл: backend/.env
|
||||||
|
- Ключ шифрования и секреты коммитятся в git
|
||||||
|
- Любой с доступом к репозиторию может расшифровать все заметки
|
||||||
|
- СРОЧНО: Удалите .env из истории git, ротируйте все секреты
|
||||||
|
|
||||||
|
2. Отключена CORS защита ⚠️ HIGH
|
||||||
|
|
||||||
|
Файл: backend/server.js
|
||||||
|
- CORS пакет установлен, но НЕ используется
|
||||||
|
- Приложение открыто для CSRF атак
|
||||||
|
- API доступен с любых доменов
|
||||||
|
|
||||||
|
3. Отключен Rate Limiting ⚠️ HIGH
|
||||||
|
|
||||||
|
Файл: backend/server.js:187-192
|
||||||
|
- Защита от брутфорса закомментирована
|
||||||
|
- Возможны DDoS атаки
|
||||||
|
- Перебор паролей неограничен
|
||||||
|
|
||||||
|
4. Отсутствует CSRF защита ⚠️ HIGH
|
||||||
|
|
||||||
|
- Все POST/PUT/DELETE эндпоинты уязвимы
|
||||||
|
- Используются сессии, но без CSRF токенов
|
||||||
|
|
||||||
|
5. Небезопасная конфигурация сессий ⚠️ HIGH
|
||||||
|
|
||||||
|
Файл: backend/server.js:221-236
|
||||||
|
cookie: {
|
||||||
|
secure: false, // ❌ куки передаются по HTTP
|
||||||
|
// ❌ нет httpOnly
|
||||||
|
// ❌ нет sameSite
|
||||||
|
}
|
||||||
|
|
||||||
|
🟡 СРЕДНИЕ УЯЗВИМОСТИ
|
||||||
|
|
||||||
|
6. Слабые требования к паролям
|
||||||
|
|
||||||
|
- Минимум только 6 символов
|
||||||
|
- Нет требований к сложности
|
||||||
|
- Рекомендация: минимум 12 символов + буквы/цифры/спецсимволы
|
||||||
|
|
||||||
|
7. Path Traversal в загрузке файлов
|
||||||
|
|
||||||
|
Файл: backend/server.js:1637-1641
|
||||||
|
- Недостаточная санитизация имен файлов
|
||||||
|
- Возможна запись в произвольные директории
|
||||||
|
|
||||||
|
8. Недостаточная валидация файлов
|
||||||
|
|
||||||
|
- Проверка только по MIME типу
|
||||||
|
- Возможна загрузка вредоносных файлов с подменой расширения
|
||||||
|
- Рекомендация: Magic byte validation
|
||||||
|
|
||||||
|
9. Нет валидации AI input
|
||||||
|
|
||||||
|
Файлы: server.js:3117, 3258, 3655
|
||||||
|
- Возможны prompt injection атаки
|
||||||
|
- Нет лимитов на длину текста
|
||||||
|
- Риск больших расходов на API
|
||||||
|
|
||||||
|
10. Слабая генерация backup кодов
|
||||||
|
|
||||||
|
Math.random().toString(36) // ❌ не криптографически безопасно
|
||||||
|
Используйте: crypto.randomBytes()
|
||||||
|
|
||||||
|
📊 ПРОБЛЕМЫ КАЧЕСТВА КОДА
|
||||||
|
|
||||||
|
11. Массовое дублирование кода
|
||||||
|
|
||||||
|
Файлы: NoteEditor.tsx vs NoteItem.tsx
|
||||||
|
- 500+ строк идентичного markdown кода
|
||||||
|
- При багфиксе нужно править 2 места
|
||||||
|
- Рекомендация: Вынести в useMarkdownEditor hook
|
||||||
|
|
||||||
|
12. Проблемы производительности
|
||||||
|
|
||||||
|
Файл: NoteEditor.tsx:820-870
|
||||||
|
- handleSelection вызывается на каждый mousemove
|
||||||
|
- Нет debounce/throttle
|
||||||
|
- Рекомендация: Добавить debounce 100ms
|
||||||
|
|
||||||
|
Файл: NotesList.tsx:167-183
|
||||||
|
- Сортировка массива на каждом рендере
|
||||||
|
- Рекомендация: Обернуть в useMemo
|
||||||
|
|
||||||
|
13. Злоупотребление TypeScript any
|
||||||
|
|
||||||
|
- 29 использований error: any
|
||||||
|
- any в types для sync queue
|
||||||
|
- Множество @ts-expect-error
|
||||||
|
- Рекомендация: Использовать unknown и type guards
|
||||||
|
|
||||||
|
14. Огромные компоненты
|
||||||
|
|
||||||
|
Файл: NoteEditor.tsx - 1,172 строки
|
||||||
|
- Нарушение Single Responsibility
|
||||||
|
- Рекомендация: Разбить на:
|
||||||
|
- Core editor
|
||||||
|
- useMarkdownEditor hook
|
||||||
|
- useFloatingToolbar hook
|
||||||
|
- useAIFeatures hook
|
||||||
|
|
||||||
|
15. Проблемы с accessibility
|
||||||
|
|
||||||
|
- Кнопки без aria-label
|
||||||
|
- Inputs без labels
|
||||||
|
- Нет focus management в модалках
|
||||||
|
- Icon-only кнопки без текстовых альтернатив
|
||||||
|
|
||||||
|
16. Отключенные ESLint правила
|
||||||
|
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
- Вместо исправления - отключение
|
||||||
|
- Пропущенные зависимости в useEffect
|
||||||
|
|
||||||
|
🎯 ПРИОРИТЕТЫ ИСПРАВЛЕНИЯ
|
||||||
|
|
||||||
|
⚠️ СРОЧНО (24 часа):
|
||||||
|
|
||||||
|
1. Удалить .env из git истории
|
||||||
|
2. Ротировать все секреты
|
||||||
|
3. Включить rate limiting
|
||||||
|
4. Настроить CORS
|
||||||
|
5. Исправить session cookies
|
||||||
|
|
||||||
|
🔴 Высокий (1 неделя):
|
||||||
|
|
||||||
|
1. Добавить CSRF защиту
|
||||||
|
2. Улучшить валидацию паролей
|
||||||
|
3. Исправить CSP конфигурацию
|
||||||
|
4. Добавить валидацию всех inputs
|
||||||
|
5. Исправить проблемы с TypeScript any
|
||||||
|
|
||||||
|
🟡 Средний (1 месяц):
|
||||||
|
|
||||||
|
1. Вынести дублированный код
|
||||||
|
2. Оптимизировать производительность
|
||||||
|
3. Разбить большие компоненты
|
||||||
|
4. Добавить unit тесты
|
||||||
|
5. Исправить accessibility
|
||||||
|
|
||||||
|
📈 Метрики качества:
|
||||||
|
|
||||||
|
- Безопасность: 4/10
|
||||||
|
- Качество кода: 6.5/10
|
||||||
|
- TypeScript: 5/10
|
||||||
|
- Производительность: 6/10
|
||||||
|
- Accessibility: 4/10
|
||||||
Loading…
x
Reference in New Issue
Block a user