86fed54811
Add OIDC back-channel logout for deactivated accounts
Deploy production / deploy (push) Successful in 10m4s
2026-10-27 20:01:26 +03:00
lizerk
14f1e52425
fix(messages): make HTTP authoritative for chat reads
Deploy production / deploy (push) Failing after 4s
2026-09-10 11:41:59 +03:00
lizerk
efd4a84c89
Update application functionality and supporting components
2026-09-07 16:59:38 +03:00
lizerk
cd64ee4ef7
Add project analytics and improve commerce integrations
2026-09-07 12:23:15 +03:00
c7ba753087
Allow browser SSO logout without JWT authentication
2026-09-04 12:47:14 +03:00
17c84eb366
Sync LDAP usernames and verify corporate emails
2026-09-04 11:19:51 +03:00
f2e85de672
Support unified LDAP, email, and phone login
2026-09-04 09:58:20 +03:00
cae8e97146
Add corporate OpenID Connect provider and browser sessions
2026-09-04 09:50:56 +03:00
lizerk
205fd7252d
Update application features and supporting components
2026-08-19 12:09:01 +03:00
lizerk
bd515fd6d5
Harden commerce import reliability
2026-08-18 18:48:00 +03:00
lizerk
214323760b
Fix notification lifecycle and commerce task scheduling
2026-08-18 16:43:50 +03:00
lizerk
138a1284cd
Improve commerce, notifications, and task UX
2026-08-18 15:30:55 +03:00
lizerk
156b649b04
Complete commerce synchronization and realtime updates
2026-08-18 09:10:40 +03:00
lizerk
53cf1918c0
Add message mentions and unread mention tracking
2026-08-17 16:08:14 +03:00
lizerk
3c5a8c87e2
Update application functionality and supporting components
2026-08-17 13:54:35 +03:00
lizerk
cca52d70d6
Refactor project structure and remove obsolete code
2026-08-15 11:16:50 +03:00
lizerk
b7e20c8956
feat: stream calendar events over websocket
2026-08-14 23:44:28 +03:00
lizerk
aaa1da663c
refactor: unify observability and realtime updates
2026-08-14 22:49:20 +03:00
lizerk
014afc485e
Remove obsolete code and simplify project structure
2026-08-14 17:00:49 +03:00
lizerk
78f19e27af
Remove obsolete files and simplify project structure
2026-08-14 16:35:21 +03:00
lizerk
beb4b8b86b
refactor(departments): unify department feed and discussion flows
2026-04-14 16:14:52 +03:00
lizerk
969554bf3f
refactor(frontend): remove redundant department panels
2026-04-13 23:44:18 +03:00
lizerk
64eafeea46
refactor(frontend): normalize danger action shells
2026-04-13 23:41:16 +03:00
lizerk
3b855e2ef1
refactor(frontend): split department showcase and management
2026-04-13 22:25:30 +03:00
lizerk
b73336744a
refactor(frontend): simplify department workspace
2026-04-13 21:23:54 +03:00
lizerk
28d61b842c
refactor(frontend): build department management screen
2026-04-13 17:52:41 +03:00
lizerk
5ab638892b
chore: checkpoint workspace changes
2026-04-13 16:00:53 +03:00
lizerk
4127e65c4f
docs(frontend): prioritize person chip pattern
2026-04-13 15:49:16 +03:00
lizerk
b9a6de7b43
refactor(frontend): unify comment composer controls
2026-04-13 15:33:57 +03:00
lizerk
c96b9453a5
refactor(frontend): normalize vertical rhythm scale
2026-04-13 15:21:54 +03:00
lizerk
07ded50432
refactor(frontend): extract settings page controller
2026-04-13 14:44:38 +03:00
lizerk
caf6eebc0f
refactor(frontend): refine profile timeline balance
2026-04-13 14:30:29 +03:00
lizerk
d437f63d02
refactor(frontend): finish people cluster alignment
2026-04-13 14:25:00 +03:00
lizerk
79b66c5884
refactor(frontend): align profile sections and users list
2026-04-13 14:20:51 +03:00
lizerk
fe040e2da9
refactor(frontend): align profile page controllers
2026-04-13 14:15:34 +03:00
lizerk
55f3171636
docs(frontend): document genre drift and refactor waves
2026-04-13 14:05:47 +03:00
lizerk
c87901452a
docs(frontend): soften requests guidance
2026-04-13 13:46:03 +03:00
lizerk
61db827ae2
refactor(frontend): tighten requests controls contract
2026-04-13 13:23:16 +03:00
lizerk
ba41dd2b0f
refactor(frontend): remove requests image warnings
2026-04-13 13:19:54 +03:00
lizerk
2cfa1099f3
refactor(frontend): normalize requests list shell
2026-04-13 13:17:34 +03:00
lizerk
8b150e270d
refactor(frontend): extract requests screen orchestration
2026-04-13 13:11:58 +03:00
lizerk
331dc1433a
refactor(frontend): decompose requests screen
2026-04-13 12:56:00 +03:00
lizerk
3a2d05a64d
feat(requests): улучшены фильтры по датам, исправлена логика фильтрации, добавлена инструкция по тестированию
2026-03-27 14:57:31 +03:00
lizerk
540e295ef4
feat: Fix LDAP DN bugs + add password management in admin
...
BREAKING CHANGES:
- Department.head автоматически очищается при увольнении руководителя
- LDAP managedBy атрибут очищается при увольнении
Fixes:
- DN не перемещался при восстановлении сотрудника (Dismissed → Users)
- DN не перемещался при увольнении сотрудника без отделов
- Ошибка при увольнении из множественных отделов (двойной modify_dn)
- Неправильные URL patterns для LDAP моделей в админке
- Двойное кодирование DN в редиректе смены пароля
Features:
- Добавлен метод _ensure_ldap_dn_location для гарантированного перемещения DN
- Добавлена проверка already_there в sync_department_member_to_ldap
- Управление паролями LDAP пользователей через админку:
* Кнопка смены пароля в карточке пользователя
* Массовое действие смены пароля
* Автосинхронизация с Django password hash
- Автоочистка Department.head и LDAP managedBy при увольнении руководителя
- Добавлены методы set_password() и change_password() в LdapUser
Changed:
- Переписан сигнал sync_department_member_to_ldap с реальными методами
- Исправлены URL patterns: ldap_* → employees_*
2026-03-23 20:32:39 +03:00
lizerk
75662ec7ea
feat(ldap): Полная миграция на django-ldapdb ORM с миксинами и Django Admin
...
LDAP ORM модели (orm_models.py):
================================
✅ Применены миксины ModifyDnMixin и LdapSyncStateMixin ко всем моделям
✅ LdapUser - поддержка modify_dn + автоуправление LdapSyncState
✅ LdapGroup - поддержка modify_dn для перемещения групп
✅ LdapOrganizationalUnit - поддержка modify_dn для реорганизации
Миксины (mixins.py) - НОВЫЙ ФАЙЛ:
=================================
✅ ModifyDnMixin - автоматический modify_dn при изменении base_dn
• Отслеживает изменения base_dn
• Выполняет LDAP modify_dn с newsuperior
• Обновляет _saved_dn для корректного последующего save()
• Использование: user.base_dn = new_dn; user.save()
✅ LdapSyncStateMixin - автоуправление LdapSyncState
• Автоматически создает/обновляет LdapSyncState при save()
• Автоматически удаляет LdapSyncState при delete()
• Настройки: _sync_model_name, _sync_pk_field
Django Admin для LDAP (admin.py) - НОВЫЙ ФАЙЛ:
==============================================
✅ LdapUserAdmin - полноценная админка для LDAP пользователей
• List display: CN, SAM, email, Django Employee link, sync status
• Search: по CN, SAM, email, имени, фамилии
• Filters: по userAccountControl
• Actions синхронизации:
- sync_from_ldap_to_django (LDAP → Django)
- sync_from_django_to_ldap (Django → LDAP)
- show_sync_diff (сравнение данных)
• Fieldsets: идентификация, персональные данные, контакты, UAC, группы
• DN форматирование с подсветкой компонентов
• Sync status indicators с иконками
Django Admin для Employee (employees/admin.py):
===============================================
✅ Добавлены зеркальные actions синхронизации:
• sync_from_django_to_ldap - создание/обновление в LDAP
- Автоматическое создание LDAP пользователя если не существует
- Генерация временного пароля
- Установка is_ldap_managed = True
• sync_from_ldap_to_django - обновление из LDAP
• show_sync_diff - сравнение Django ↔ LDAP
✅ Импорт django.contrib.messages для уведомлений
Сервисы LDAP (services/):
=========================
✅ UserService - полная миграция на ORM для UPDATE операций
✅ GroupService - использование ORM для модификаций
✅ DepartmentService - ORM для обновления OU
✅ PositionService - ORM для групп позиций
Тесты (tests/unit/):
===================
✅ test_user_service.py - обновлены под ORM
✅ test_group_service.py - обновлены под ORM
✅ test_position_service.py - обновлены под ORM
✅ conftest.py - добавлены фикстуры для ORM моделей
Authentication (auth_backends.py):
=================================
✅ EmailOrPhoneBackend - добавлено подробное debug логирование
• Логирование email/phone lookup
• Логирование is_active проверки
• Логирование password check с hash prefix
✅ SuperuserOnlyBackend - добавлено debug логирование
• Логирование parent auth результата
• Логирование is_superuser проверки
API (api/auth/serializers.py):
==============================
✅ PhoneOrEmailTokenObtainPairSerializer - исправлен KeyError
• Добавлена проверка credentials перед super().validate()
• Явный AuthenticationFailed при отсутствии учетных данных
Middleware (middleware.py):
===========================
✅ Очистка от устаревшего кода (305 → 102 строки)
• ❌ Удалена EmailVerificationMiddleware (не используется)
• ❌ Удалена RegistrationIPRestrictionMiddleware (не используется)
• ❌ Удалены все ссылки на namespace 'auth_front'
• ✅ Возврат 403 для неавторизованных вместо редиректа
Settings (settings.py):
=======================
✅ LOGIN_URL изменен с 'auth_front:login' на '/admin/login/'
✅ Добавлено DEBUG логирование для:
• django.contrib.auth
• eusrr_backend.auth_backends
Миграции:
=========
✅ Удалены старые миграции LDAP моделей (0042, 0043)
✅ Добавлена миграция LdapSyncQueue (0042_ldapsyncqueue.py)
Документация:
=============
✅ ADMIN_GUIDE.md - руководство по использованию LDAP Admin
✅ docs/guides/ldap-orm-mixins-usage.md - usage guide для миксинов
✅ docs/completed/ldap-orm-create-support.md - документация ORM миграции
✅ docs/in-progress/LDAP_ORM_MIGRATION_PLAN.md - план миграции
Инфраструктура (__init__.py):
=============================
✅ Добавлен импорт admin для авторегистрации
✅ Экспорт ORM моделей (LdapUser, LdapGroup, LdapOrganizationalUnit)
ИТОГО:
======
• Полная миграция с ldap3 на django-ldapdb ORM для UPDATE/MOVE/DELETE
• Унификация: один подход для всех LDAP операций через модели
• Автоматизация: синхронизация состояния и перемещения через миксины
• UI: полноценный Django Admin для управления LDAP объектами
• Отладка: расширенное логирование аутентификации
• Чистота: удален устаревший код middleware и миграций
• Тесты: 29 passed, 0 failed, 18 skipped
Breaking Changes: НЕТ - обратная совместимость сохранена
2026-03-19 22:33:06 +03:00
4025eb2b19
feat: Create modern DocumentDetailModal with tabs based on market analysis
...
Analyzed leading DMS solutions (Google Drive, Notion, Confluence, SharePoint, ClickUp)
and implemented enterprise-grade document modal with progressive disclosure.
NEW COMPONENT:
- DocumentDetailModal.tsx - modern tabbed interface for document details
STRUCTURE:
- Fixed header with title, metadata, quick actions, status badge
- Tab navigation: Overview | Activity | Acknowledgements | Versions
- Full-screen modal with optimized layout
TAB: OVERVIEW
- 2-column layout (66% main content, 33% sidebar)
- Document preview (images, PDF iframe, file icon fallback)
- Description section
- Workflow actions
- Sidebar with:
• Author & dates (created, modified)
• Folder location (breadcrumbs)
• Tags (color badges)
• Recipients (departments + individuals)
TAB: ACTIVITY
- Timeline placeholder for workflow events
- Ready for integration with django-reversion API
- Shows created/published events
TAB: ACKNOWLEDGEMENTS
- Reuses existing DocumentAcknowledgement component
- Progress visualization
- User list with status
TAB: VERSIONS
- Placeholder for version history
- Ready for integration with django-reversion API
IMPROVEMENTS:
- Progressive disclosure - info organized in tabs, not overwhelming
- Visual hierarchy - preview is focal point, actions always visible
- Quick actions - Open, Download, Share in header
- Rich metadata - type, size, dates, location, tags, recipients
- Scalable structure - easy to add new tabs (comments, related docs)
TYPES:
- Added document_type field (id, name, description) to Document interface
- Added tags field (id, name, color) to Document interface
DOCUMENTATION:
- docs/guides/MODERN_DOCUMENT_UI.md - comprehensive guide
- Market analysis of 5+ leading DMS solutions
- Architecture decisions and UX improvements
- Integration roadmap with django-reversion
- Future features: comments, related documents, @mentions
BENEFITS:
- Enterprise-level UX matching Confluence/SharePoint standards
- All document info accessible without context switching
- Transparent workflow and history (after backend integration)
- Modular and extensible architecture
2026-02-28 13:46:58 +03:00
967819a58f
feat: интеграция django-rules для object-level permissions
...
- Установлен пакет rules==3.5
- Добавлен ObjectPermissionBackend в AUTHENTICATION_BACKENDS
- Созданы базовые правила для employees:
* Предикаты: is_hr_staff, is_department_head, is_own_profile и др.
* Правила: view/change/delete employee, view reports и контакты
- Созданы базовые правила для documents:
* Предикаты: is_document_owner, has_document_access, can_approve и др.
* Правила: view/change/delete/approve/publish/share documents
- Правила регистрируются в apps.py (ready() метод)
- Создана подробная документация с примерами использования
* В views, templates, DRF permissions, Django Admin
* Сценарии: многоуровневое согласование, временные ограничения
* Сравнение с django-guardian, отладка, тестирование
Документация: docs/guides/DJANGO_RULES_INTEGRATION.md
2026-02-28 00:07:53 +03:00
8a083f6f67
fix: Исправлена система автоотметки прочитанных сообщений
...
- Удалено поле last_read_at из ChatReadState, используется только last_read_message FK
- Исправлена логика автоотметки: отмечается последнее ЗАГРУЖЕННОЕ сообщение, а не последнее в чате
- Убран вызов chat.mark_read() при WebSocket open_chat (отмечал последнее в чате вместо загруженного)
- Добавлен signal для мониторинга изменений ChatReadState
- Исправлена логика скролла: убран автоскролл при дозагрузке вниз
- Добавлена проверка разрывов при WebSocket сообщениях (предотвращает пропуск сообщений)
- Реализована автоотметка WebSocket сообщений (только если пользователь внизу)
- Асимметричная загрузка: 24 контекста + 6 новых сообщений
- Добавлен ScrollableMessageList компонент для корректной работы скролла
- Миграции: 0028 (удаление last_read_at), 0029 (индекс на last_read_message)
2026-02-25 20:29:00 +03:00
8b2d3b378e
feat(frontend): добавлен API клиент и восстановлен backend из master
...
- Создан frontend/src/lib/api.ts с 43 методами для всех API endpoint'ов
- Создан frontend/src/lib/permissions.ts для проверки прав доступа
- Исправлен URL в getChatMessagesAround: /messages/around/ → /messages-around/
- Исправлен параметр: message_id → around_id
- Восстановлен backend из ветки master для стабильности
- Удалены конфликтующие файлы Pages Router (src/pages, App.tsx, providers)
- Оставлена только чистая структура Next.js App Router
- Добавлена документация по миграции API v2
2026-02-24 15:40:50 +03:00
e97dc26514
docs: добавление документации по тестированию и оптимизации
...
API Testing:
- docs/guides/API_TESTING_GUIDE.md - полное руководство по API тестированию
* Использование Postman коллекции
* Newman CLI интеграция
* REST Client примеры
* Pytest примеры с fixtures
- docs/reports/API_EMPLOYEES_COVERAGE.md - анализ покрытия эндпоинтов
* Покрытие расширено с 23% до ~70%
* Список протестированных и непокрытых эндпоинтов
Database Optimization:
- backend/docs/reports/DB_QUERIES_ANALYSIS.md - детальный анализ запросов к БД
* 8 ViewSet'ов проанализированы
* Найдены критические N+1 проблемы:
- SkillViewSet.merge() делает 2N запросов в цикле
- GroupViewSet.retrieve не использует prefetch_related
- RegisterAPIView дважды проверяет email
* Предложены оптимизации с raw SQL
* Рейтинг текущего состояния: 4/5 звезд
2026-02-17 18:33:56 +03:00