- Webhooks now return 200 OK even on errors (to prevent retries)
- Improved error handling with proper JSON responses
- Enhanced logging for webhook debugging
- Supervisor logs now visible in docker logs (stdout/stderr)
- Fixed TodoistIntegration error display in UI
- Added webhook_token to telegram_integrations
- Webhooks now identify users by token in URL (/webhook/telegram/{token}, /webhook/todoist/{token})
- Webhook automatically configured for all users on backend startup
- Migration 011: Add webhook_token column
Features:
- User registration and login with JWT tokens
- All data is now user-specific (multi-tenancy)
- Profile page with integrations and logout
- Automatic migration of existing data to first user
Backend changes:
- Added users and refresh_tokens tables
- Added user_id to all data tables (projects, entries, nodes, dictionaries, words, progress, configs, telegram_integrations, weekly_goals)
- JWT authentication middleware
- claimOrphanedData() for data migration
Frontend changes:
- AuthContext for state management
- Login/Register forms
- Profile page (replaced Integrations)
- All API calls use authFetch with Bearer token
Migration notes:
- On first deploy, backend automatically adds user_id columns
- First user to login claims all existing data
- Fix TelegramUpdate struct to handle message and edited_message properly
- Fix chat_id saving for messages without text
- Add comprehensive logging for webhook registration
- Improve error handling and diagnostics
- Add telegram_integrations table to store bot token and chat_id
- Add Integrations tab with Todoist and Telegram integration screens
- Remove TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID from env variables
- All Telegram configuration now done through UI
- Telegram webhook registration happens when user saves bot token
- Rename TELEGRAM_WEBHOOK_BASE_URL to WEBHOOK_BASE_URL
- Создан скрипт dump-db.sh для создания дампов (по умолчанию из .env.prod)
- Создан скрипт restore-db.sh для восстановления дампов (по умолчанию в .env.local)
- Создан скрипт list-dumps.sh для просмотра списка дампов
- Добавлена директория database-dumps/ для хранения дампов
- Обновлен .gitignore для исключения дампов и env файлов
- Исправлен контекст сборки в docker-compose.yml для backend
- Добавлено автоматическое ограничение количества дампов (максимум 10)
- Добавлены project/move и project/delete в nginx.conf для проксирования
- Обновлен nginx-unified.conf с новыми маршрутами
- Vite config уже поддерживает /project/* через общий прокси
- Если проект с указанным именем не существует - просто переименовываем текущий проект
- Если проект существует - переносим все данные (nodes, weekly_goals) в существующий проект
- При удалении проекта удаляются все связанные weekly_goals
- Добавлено поле deleted в таблицу projects (миграция 007)
- Изменена иконка перехода на экран проектов (список вместо звезды)
- Заменен крестик на троеточие в списке проектов
- Добавлено модальное окно с кнопками 'Перенести' и 'Удалить'
- Реализован экран переноса проекта с выбором существующего или созданием нового
- Добавлены API endpoints: /project/move и /project/delete
- При переносе проекта обновляются nodes и weekly_goals с обработкой конфликтов
- При удалении проекта удаляются все связанные weekly_goals
- Добавлена фильтрация удаленных проектов во всех SQL запросах
- Обновлена materialized view для исключения удаленных проектов
- Заменен EXTRACT(YEAR) на EXTRACT(ISOYEAR) в materialized view для корректной работы на границе года
- Обновлена миграция 001_create_schema.sql для использования ISOYEAR
- Создана миграция 006_fix_weekly_report_mv_structure.sql для исправления структуры view (LEFT JOIN)
- Добавлен endpoint /admin/recreate-mv для пересоздания materialized view
- Обновлена документация миграций в README.md
- Обновлены зависимости Go (go.mod, go.sum)