71 Commits

Author SHA1 Message Date
root
24d6042c00 fix(crm): super_admin видит все pipelines и deals без фильтра по clubId
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Для super_admin clubId=null — не добавляем фильтр WHERE clubId,
чтобы видеть данные всех клубов. Club roles фильтруют по своему clubId.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:35:08 +00:00
root
75bafc68f6 fix(crm): revert OR-фильтр pipelines, привязать к клубу в БД
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
clubId=null — платформенные данные, недоступны club_admin.
Вернул строгий фильтр по clubId. Pipelines привязаны к клубу в БД.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:02:27 +00:00
root
7e13c5ffc1 fix(crm): pipelines видны всем ролям (club-specific + shared)
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
findAll теперь возвращает pipelines с clubId текущего клуба И с
clubId=null (общие, созданные суперадмином). Ранее club_admin не
видел pipelines → фронтенд не загружал сделки.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:59:22 +00:00
root
3c822312ee fix(api): убрать by-number маршруты, GET /:id принимает UUID и number
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Удалены отдельные эндпоинты /by-number/:number для deals и users.
Теперь GET /:id определяет формат параметра (число → getByNumber,
UUID → getById) и вызывает соответствующий метод. Фронтенд вызывает
/crm/deals/{number} и /users/{number} напрямую.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:28:25 +00:00
root
91b13923cb fix(crm): клик по сделке — фоллбэк на UUID если нет number
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- onDealClick передаёт number (string) или UUID как фоллбэк
- deal/[id] загружает по by-number или по UUID в зависимости от формата
- Проставлен number=100 для сделки без номера в БД

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:21:23 +00:00
root
e791aa9201 feat(staff): роутинг сотрудников по number вместо UUID
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- API: GET /users/by-number/:number + findByNumber в UsersService
- Список: клик по сотруднику → /staff/{number}
- Детальная: загрузка через /users/by-number/{number}
- PATCH/avatar/password операции используют user.id (UUID) внутри
- Синхронизировано в web-platform-admin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:11:46 +00:00
root
20830dda8b fix(crm): фоллбэк /crm/{uuid} → /crm/deal/{number} для старых ссылок
Старый маршрут /crm/[id] теперь редиректит UUID-ссылки (из кеша
браузера или внешних источников) на новый формат /crm/deal/{number}.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:03:53 +00:00
root
3bb4d5a28f feat(crm): роутинг с int ID, edit mode по карандашику, кнопки под блоками
- API: GET /crm/deals/by-number/:number для поиска сделки по номеру
- Маршруты: /crm/deal/kanban, /crm/deal/list, /crm/deal/{number}
- /crm редиректит на /crm/deal/kanban
- Карандашик в блоке переводит ВСЕ editable поля в edit mode
- Кнопки «Общий/Мой вид» и «Добавить раздел» — под блоками
- Убран double-click для редактирования полей
- onDealClick передаёт deal.number, API операции через deal.id (UUID)
- Изменения синхронизированы в web-platform-admin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 13:53:08 +00:00
root
7eaef128f9 fix(infra): увеличить лимит памяти API до 1G, добавить source-maps
API с booking-модулем потребляет ~160MB (через dist/main.js),
ранее nest start тянул ~800MB и PM2 убивал по лимиту 512M.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 13:11:12 +00:00
5fcf8323d4 Merge pull request 'feat(booking): модуль онлайн-записи + CRM улучшения' (#3) from feature/booking-module into main
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
2026-02-27 12:49:31 +00:00
root
f87923233b fix: ESLint-фиксы, CRM card layout по ролям, нумерация сотрудников
Some checks failed
CI / Lint & Format (pull_request) Has been cancelled
PR Check / Lint & Typecheck (pull_request) Has been cancelled
CI / Backend Tests (pull_request) Has been cancelled
CI / Build All Apps (pull_request) Has been cancelled
CI / E2E Tests (Playwright) (pull_request) Has been cancelled
CI / Deploy to Production (pull_request) Has been cancelled
- API: роли в uppercase (login + refreshToken), user.number (порядковый),
  card-layout с roleAccess, notifications typing fix
- Mobile: void для floating promises, типизация Ionicons, удаление unused imports
- Web: CRM deal detail — динамическая раскладка по блокам, useUser хук,
  card-layout-editor расширен, staff number в списках
- Watchdog: мелкие правки

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 12:23:07 +00:00
root
afe2bb08fe feat(booking): модуль онлайн-записи — полный стек (API + Mobile + Web)
7 спринтов: Prisma-модели (14 таблиц, 5 enum), NestJS-модуль (CRUD, доступность,
расписание, групповые занятия, абонементы, оплаты, waitlist, webhooks, CRM-бридж,
уведомления, аналитика, кэш), мобильные экраны (список записей, детали, групповые
занятия), веб-панели (букинг-настройки, сайдбар), миграция PostgreSQL.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 12:14:46 +00:00
root
6cc65569e1 feat(crm): inline-редактирование, стадии, дела, загрузка аватаров
- GET /users/staff endpoint с поиском по имени
- Fix /staff → /users/staff во всех CRM-компонентах
- Searchable combobox для выбора ответственного (create/edit deal)
- Default assignee = текущий пользователь при создании сделки
- Bitrix-style переключатель стадий (цветные прямоугольники)
- Inline-редактирование карточки сделки (вместо диалога)
- Форма создания дел (активностей) в activity-list
- Loading states для Win/Lose/Delete/Complete (защита от двойных кликов)
- Fix body parser: NestJS API вместо дублирующих express middleware
- Копирование staff-компонентов в platform-admin (аватар, сотрудники)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 10:48:07 +00:00
root
204f8ce396 feat(crm): мультисущностная архитектура, роли, раскладка карточек
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- packages/crm-ui: переиспользуемые компоненты (EntityKanban, EntityTable,
  EntityCard, EntityFormDialog, StageSwitcher, ActivityList, TimelineFeed,
  FieldManager, PipelineManager, StageBadge)
- Pipeline entityType: воронки привязаны к типу сущности
- Role system: таблица roles + user_roles, multi-role JWT, RolesGuard
- Card layouts: admin-default + user-override раскладка карточек
- Field roleAccess: видимость полей per role (hidden/readonly/editable)
- EntityPermissions: multi-role поддержка (string | string[])
- DnD стадий, произвольный цвет стадий, FieldManager entityType prop

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 09:27:51 +00:00
root
a10673fdeb feat(crm): порядковые номера сделок, управление стадиями, редактирование, кастомные поля
— Очистка тестового мусора: дубликаты полей, пайплайнов, причин проигрыша
— Порядковые номера сделок (#N) per-club с @@unique([clubId, number])
— DELETE endpoints для стадий (с переносом сделок) и пайплайнов
— onDelete: Cascade→Restrict для стадий, SetNull для истории
— PipelineManager: полный CRUD воронок и стадий с палитрой цветов
— FieldManager: CRUD кастомных полей с типами и опциями
— EditDealDialog: редактирование сделки (контакт, сумма, компания, ответственный)
— Кастомные поля в форме создания и карточке сделки
— Soft-delete сделок, выбор ответственного, расширенные фильтры
— Поиск по номеру сделки (#42 / 42)
— Исправлены pre-existing тесты: module.guard, themes, auth, reports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 07:33:46 +00:00
root
21c395d0d5 chatbot: [Цитата сообщения на которое отвечает пользователь]:
Задача #62 завершен
2026-02-26 19:40:01 +00:00
root
3d28f62ad0 chatbot: сделай тестовый документ
=== ОГРАНИЧЕНИЯ ЧАТБОТА ===
Ты можешь ТОЛЬКО:
2026-02-26 19:13:37 +00:00
root
cbb84cfa65 fix: merge-протокол worktree — split strategy (документы vs код), rebase
Корневая проблема: validateAndMerge() никогда не вызывалась из
task-manager — документы создавались в worktree, но не мёрджились
в main. Пользователь видел старый контент.

Исправлено:
- task-manager.ts: вызов validateAndMerge() после завершения задачи
- worktree-manager.ts: две стратегии мёрджа:
  - Документы (apps/*/document/**): fast path без lint/typecheck/test,
    rebase + merge, рестарт только web-platform-admin
  - Код: полный путь lint → typecheck → test → rebase → merge
- Rebase вместо ff-only решает расхождение веток при параллельной работе
- Восстановлен документ франшиз (90+ записей из chatbot worktree)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:40:28 +00:00
root
8da9515445 docs: AI-first workflow — test-first, декомпозиция по слоям, quality gate
Формализация процесса разработки на основе анализа статьи Zilliz
о провале Claude Code на крупном проекте. Новый документ описывает:
- Формат задачи с Definition of Done до начала работы
- Test-first подход (тесты → код → проверка)
- Послойная декомпозиция (Prisma → API → UI), max 20 файлов/коммит
- Автоматический quality gate (typecheck всех apps + тесты)
- Таблица антипаттернов и метрики качества

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:11:01 +00:00
root
e4b5e3c7c3 feat: карточка сотрудника, профили с role switcher, sidebar user info во всех панелях
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Backend: GET/PATCH /users/:id, POST /users/:id/password, POST /users/:id/avatar
- Prisma: email, roomId, comment поля в User, relation к Room
- Static files: avatars через useStaticAssets, multer upload (5MB, JPEG/PNG/WebP)
- Club-admin: /staff/[id] — аватар, ФИО, email, телефон, роль, департамент, зал, комментарий, смена пароля
- Все панели: sidebar с user info + logout, /profile с role switcher для admin/super_admin
- Ecosystem: dist/main.js вместо nest start для стабильного запуска
- .npmrc: public-hoist-pattern для @types/* (fix pnpm + @types/react)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 11:13:57 +00:00
root
d7aa2ac6b4 feat: документ фитнес-студий, fix TS-ошибки CRM, typecheck защита от build-краша
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Документ: сравнительный анализ 11 фитнес-студий Екатеринбурга
  (fitness-studios-comparison) — специализация, цены, ИНН, масштаб
- Fix: 3 strict-TS ошибки в CRM (possibly undefined) блокировавшие сборку
- Safety: скрипт typecheck (tsc --noEmit) во всех web-приложениях —
  безопасная проверка типов без удаления .next/
- CLAUDE.md: правило «никогда не запускать build на живом сервере»

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 10:10:01 +00:00
root
accfa61e08 fix: E2E тесты — 143/143 passed, 0 failed
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Global setup: единый логин всех пользователей перед тестами (без rate limit)
- Playwright проекты: testMatch привязка файлов к проектам (убрал 5x дублирование)
- LP порт: 3004 → 3050 (реальный порт из ecosystem.config)
- Theme тесты: мок API через page.route() (предотвращение 401→logout)
- Web UI тесты: защита response?.status() ?? 200 от undefined
- getCachedTokens(): чтение токенов из файла вместо loginAs в каждом beforeAll

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 08:40:39 +00:00
root
8f1635f3a2 docs: уточнение Hide Don't Block — прямой URL допускает «контент недоступен»
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Ссылка от коллеги по прямому URL — допустимо показать страницу «Контент недоступен».
Но ссылка нигде в интерфейсе пользователя не должна появляться: ни в меню, ни в списках, ни в карточках.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 07:36:53 +00:00
root
f6d10aa276 docs: принцип Hide Don't Block + Role Switcher суперадмина
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- UX-авторизация: недоступные элементы не рендерятся (не «403 / нет прав»)
- Role Switcher: суперадмин переключает роль в header без перелогинивания
- Обновлены: CLAUDE.md, roles-rbac.md, business-logic.md, sprints.md
- Sprint 10: добавлены задачи 48-54 (RoleGate, filterByRole, impersonate API)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 07:34:05 +00:00
root
021337ce79 fix: CRM баги — permissions в win/lose/move, enum source, E2E тесты 17/17
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- DealManager.win/lose/move: добавлен skipPermissions в context (controller guard уже проверяет роли)
- WebhookProcessor: source 'LANDING' → 'FORM' (enum CrmDealSource)
- E2E: кэширование токенов в beforeAll, default pipeline setup, contactName в deal creation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 07:29:02 +00:00
root
fb414d4a57 feat: CRM-модуль — Entity Factory Pattern, сделки, воронки, таймлайн, вебхуки
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Sprint 9: Полная реализация CRM-модуля на базе Entity Factory Pattern.

Backend (45 файлов):
- Entity Factory Core: EntityManager<T> с lifecycle-хуками, событиями, правами
- Pipelines & Stages: CRUD, дефолтные B2B/B2C воронки с 7-8 стадиями
- Deals: создание, перемещение по стадиям, win/lose, cursor-пагинация, kanban view
- Timeline: лента событий (комментарии, звонки, стадии, формы), pin/unpin
- Activities: дела с планированием, завершением, просроченные через BullMQ scheduler
- Custom Fields: 8 типов (STRING/INTEGER/FLOAT/BOOLEAN/DATE/TIME/EMAIL/PHONE), CRUD
- Webhooks: антифрод (honeypot/timing/disposable/phone/fingerprint/IP), Smart Field Detection
- Trainings: entity manager с timeline-интеграцией
- CRM Scheduler: BullMQ processor (overdue activities, stale deals, unprocessed leads)

Frontend — Platform Admin + Club Admin:
- Kanban-доска с HTML5 drag-and-drop между стадиями
- Табличный вид со всеми фильтрами (pipeline, source, search)
- Карточка сделки: контакт, реквизиты, таймлайн, дела, тренировки
- Настройки CRM: 4 вкладки (воронки, кастомные поля, вебхуки, причины проигрыша)
- Форма лендинга: honeypot, timing, UTM, POST на /crm/deals/from-form

E2E тесты: Pipelines, Deals CRUD, Timeline, Activities, Form spam, RBAC, Lost Reasons, Custom Fields

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 07:04:59 +00:00
root
8110651561 fix: персистентность тем + кросс-сервисная синхронизация
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Корневая причина: @unique на themeId в Prisma → P2002 ошибка при
повторной установке ранее использованной темы → .catch() скрывал ошибку →
API fetch на перезагрузке возвращал старую тему и перезаписывал localStorage.

Исправления:
- Убран @unique с themeId в PlatformTheme (разрешает аудит-трейл)
- Добавлен @@index([createdAt]) для быстрого findFirst orderBy desc
- handleApply теперь показывает ошибки пользователю вместо .catch(() => {})
- Лендинг: @theme inline → @theme, добавлен ThemeSync компонент
  (подтягивает primary color из API и применяет к LP)
- Lint-фиксы в competitor-analysis-skk

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:26:25 +00:00
root
3959db8779 fix: темы теперь применяются к сайдбару — @theme inline → @theme, E2E тесты
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Заменили @theme inline на @theme в globals.css всех 3 приложений —
  Tailwind v4 теперь генерирует var() ссылки вместо хардкода значений,
  что позволяет runtime-переключение тем через CSS custom properties
- Исправлен дублирующийся React-ключ #42A5F5 в палитре Azure Professional
- Исправлена key-стратегия: key={color.hex} → key={color.name}
- Убраны неиспользуемые импорты в theme-provider (web-admin, web-club-admin)
- Добавлены E2E тесты: применение темы к сайдбару, отсутствие duplicate keys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 15:04:07 +00:00
root
bad59cfcbc fix: полный ребрендинг FitCRM → MyFitCRM — лендинг, логины, документы, тесты
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Лендинг: layout title, Hero, Footer, Problems, Testimonials, FAQ, Integrations
- Логин-страницы: web-admin, web-club-admin, web-platform-admin (лого MF + MyFitCRM)
- Mobile: экран авторизации
- Backend: TOTP issuer, seed.ts, integration-sync comments
- Документы: dev-status, competitor-analysis, best-design-solutions
- Темы: превью в настройках тем
- E2E тесты: landing.spec.ts, e2e-tests.ts data

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:43:36 +00:00
root
3578e49c7e chore: обновление страницы «Разработка» — Sprint 8 прогресс 92%, theme-aware компоненты
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:38:08 +00:00
root
1e0e9750b1 feat: улучшение тем, ребрендинг MyFitCRM, полное покрытие темами всех сервисов
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Обновлены цветовые схемы 9 тем (WCAG AA, контраст sidebar ≥8:1)
- Заменены 60+ hardcoded цветов на theme-aware классы (text-text, bg-card, text-error и т.д.)
- Создан SVG-логотип MyFitCRM (компонент Logo с вариантами full/icon)
- Ребрендинг FitCRM → MyFitCRM во всех 5 сервисах (17 файлов)
- Добавлена поддержка тем в web-admin и web-club-admin (ThemeProvider, globals.css)
- Обновлена страница «Разработка»: спринты, прогресс, theme-aware компоненты

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:27:05 +00:00
root
3d5945523a feat: backend API модуль тем оформления — NestJS + Prisma + E2E интеграция
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- ThemesModule: service, controller, DTOs, theme-definitions (10 тем)
- PlatformTheme Prisma-модель (37-я таблица), GET /v1/theme/current (публичный)
- PUT /v1/admin/themes/active, GET /v1/admin/themes, GET /v1/admin/themes/history (superadmin)
- EventEmitter2 theme.changed для webhook-доставки
- 10 unit-тестов, ThemeProvider фетч из API + localStorage fallback
- Оптимистичное обновление темы, стабильные E2E waitForFunction

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:34:01 +00:00
root
d8c410d1ea docs: система тем оформления в CLAUDE.md — архитектура, API, кросс-сервисная интеграция
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Добавлено: архитектура тем (10 дизайн-китов), Backend API (/v1/theme/current, /v1/admin/theme),
интеграция во все сервисы (лендинг, web-admin, club-admin, mobile), Prisma-модель PlatformTheme,
webhook theme.changed, чеклист Sprint 8 (30+ задач), права доступа (только суперадмин).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:37:07 +00:00
root
8a9cc7b81e test: E2E тесты системы тем оформления (7 тестов, все 20 проходят)
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
Тесты: загрузка страницы тем, отображение 10 тем, применение CSS-переменных,
сохранение в localStorage, восстановление после перезагрузки, data-dark для
тёмных тем, отсутствие JS-ошибок на всех страницах. Фикс: перезапуск PM2 после
очистки .next кэша (corrupted webpack chunks).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:28:37 +00:00
root
217e7dca14 feat: система тем оформления — 10 дизайн-китов с переключением из суперадмин-панели
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
ThemeProvider (контекст + localStorage), 10 тем (FitPulse Orange, Midnight Gym, Fresh Wellness,
Power Red, Azure Professional, Sunrise Gradient, Nordic Minimal, Vibrant Purple, Ocean Calm,
Royal Gold), страница /settings/themes с live-preview модалкой, ссылка в сайдбаре.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 12:12:21 +00:00
root
a0968c6243 feat: email-модуль (5 типов, шаблоны, BullMQ), 1С sync процессор, фикс SLEEPING_CLIENTS отчёта, MVP E2E тесты
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- Email-модуль: NestJS module (service, controller, BullMQ processor, scheduler)
  - 5 типов: WELCOME, TRAINING_REMINDER, MEMBERSHIP_EXPIRING, PROMO, BIRTHDAY
  - Handlebars-шаблоны, nodemailer SMTP, трекинг доставки/открытий/кликов
  - Cron: дни рождения (09:00), истекающие абонементы (10:00)
  - Prisma: EmailTemplate + EmailLog модели (36 моделей)
  - 10 unit-тестов
- 1С интеграция: BullMQ sync процессор (pull/push), маппинг данных
- Фикс: SLEEPING_CLIENTS отчёт — c.status заменён на JOIN client_memberships/client_services
- MVP E2E: 38 тестов (auth → client → funnel → training → sale → stats)
- Security: helmet, CORS, rate limiting login, path traversal защита
- Push: Firebase Admin SDK (FCM), graceful fallback
- OpenAPI → TypeScript: 6246 типов из 92 эндпоинтов
- CI/CD: E2E Playwright + автодеплой
- Leads: анализ потенциальных клиентов (2GIS, 14 городов)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:22:02 +00:00
root
18f12ad99f feat: CI/CD pipeline (E2E + deploy), Firebase push, OpenAPI TypeScript генерация
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
CI / E2E Tests (Playwright) (push) Has been cancelled
CI / Deploy to Production (push) Has been cancelled
- CI/CD: E2E Playwright тесты + автодеплой через SSH в GitHub Actions
- Push: Firebase Admin SDK (FCM/APNs), graceful fallback, деактивация невалидных токенов
- OpenAPI: /api/docs-json эндпоинт, авто-генерация 6246 типов из 92 эндпоинтов
- Sprint 1, 2, 3, 6 завершены на 100%

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 08:49:28 +00:00
root
4cb7bb950d feat: вкладка «Тестирование», автотесты UI (Playwright), ссылки для тестеров, мобильное приложение
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- Вкладка «Тестирование» на странице /development с табами (Прогресс | Тестирование)
- 65 E2E автотестов: 36 API + 29 UI (лендинг, рецепция, клуб, суперадмин)
- ~100 ручных проверок по 6 сервисам: лендинг, рецепция, клуб, суперадмин, API, мобильное приложение
- Ссылки на разделы и страницы в каждой проверке для тестировщиков
- Замечания тестеров → TODO (localStorage, фильтры ОК/Замечания)
- API route /api/documents — автообновление списка документов без rebuild
- meta.json для документов — автоматическое отображение в списке

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 08:26:16 +00:00
root
6ddcd8a68b feat: документы — PDF/Excel/печать, маршруты /document/[id], intent detection
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- Скачать PDF (jspdf + html2canvas-pro, oklch fix)
- Скачать Excel (xlsx, 3 листа: спринты, задачи, TODO)
- Печать: сайдбар скрыт через @media print CSS
- Маршруты: /documents (список), /document/[id] (детали)
- Sprint 8 → 50%: +2 задачи выполнены
- 404 not-found page
- Обновлена страница «Разработка»

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 07:35:02 +00:00
root
4c3ee4a864 feat: раздел «Документы» в суперадмин-панели + документ «Состояние разработки»
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- Sidebar: пункт «Документы» с иконкой FileText
- /documents — листинг документов (с поиском, пустое состояние)
- /documents/[id] — динамическая страница документа (HTML + экспорт DOCX/XLSX)
- /documents/dev-status — отчёт о состоянии разработки FitCRM (спринты, TODO, журнал)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 07:13:35 +00:00
root
31ff150002 chore: обновление страницы «Разработка» — Sprint 8 прогресс, 144 теста
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 07:05:18 +00:00
root
b3e16b4f28 feat: лендинг myfitcrm.ru, раздел «Разработка», фикс dashboard 400, E2E тесты admin
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- Лендинг (apps/lp): Hero, Features, Pricing, FAQ, CTA — перенесён на myfitcrm.ru
- web-admin перенесён на app.myfitcrm.ru, SSL-сертификат расширен
- Раздел «Разработка» в суперадмин-панели: диаграмма Ганта, TODO, лог выполнения
- Фикс dashboard 400: limit=500 → cursor-based пагинация (fetchAll helper)
- Фикс audit_logs 500: SQL-запрос использовал несуществующие колонки (resource → entity)
- API root redirect на /api/docs
- E2E тесты admin: 16 тестов (pagination limits, RBAC, audit-logs, search)
- ecosystem.config.js: добавлен fitcrm-lp (port 3050)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 07:03:22 +00:00
root
bd5c610de5 fix: исправление auth багов + E2E тесты 20/20
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- fix(auth): ON CONFLICT для refresh_tokens — устранение UNIQUE violation
  при быстрых последовательных логинах (одинаковый JWT iat)
- feat(auth): добавлен GET /v1/auth/profile endpoint
- fix(auth): resetTenantId() перед cross-tenant запросами в validateUser,
  refreshToken, getProfile
- fix(e2e): учётные данные тестов приведены в соответствие с seed-данными
- fix(e2e): POST /v1/clients использует coordinator (RBAC требует роль)
- test(e2e): добавлен тест на запрет POST /v1/clients для тренера (403)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 06:05:57 +00:00
root
3cff68b674 test: настройка Playwright E2E тестов + первые сценарии
Конфигурация Playwright для 4 проектов (web-admin, club-admin, platform-admin, api).
E2E тесты:
- auth.spec.ts: логин, рефреш токена, профиль, защита эндпоинтов
- clients.spec.ts: CRUD клиентов, пагинация, изоляция по club_id (RLS)
- funnel.spec.ts: воронка по этапам, статистика конверсии
- rbac.spec.ts: проверка доступа для 6 ролей (тренер, координатор, менеджер и др.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 05:43:32 +00:00
root
bcb1de5a91 feat: mobile notifications screen + PDF report generation
Mobile:
- Экран уведомлений с фильтрами (все/непрочитанные), пагинацией, pull-to-refresh
- NotificationCard с иконками по типу, относительным временем, маркером непрочитанного
- Zustand store, API service, типы для 9 типов уведомлений
- Роут в навигации (More → Уведомления)

Backend:
- PDF-генерация для 5 типов отчётов (clients_summary, funnel_conversion,
  trainer_performance, sales_summary, sleeping_clients) через pdfkit
- Async генерация с обновлением статуса (PENDING → GENERATING → COMPLETED)
- Endpoint GET /v1/reports/:id/file для скачивания PDF
- StatsService интеграция для данных отчётов

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 05:41:49 +00:00
root
2bcae58757 feat(web-admin): analytics page — реальные API-вызовы + Recharts графики
Замена хардкода на реальные данные из /stats/summary и /stats/funnel.
KPI-карточки, воронка конверсии (BarChart), распределение клиентов (PieChart),
тренировки по статусам, таблица конверсии по тренерам, блок продаж.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 05:34:01 +00:00
root
2f17ab7ae2 chore: обновление CLAUDE.md, добавление recharts, gitignore
- CLAUDE.md: добавлен workflow обработки задач через Telegram
- web-admin: добавлена зависимость recharts для страницы аналитики
- .gitignore: добавлены .expo/ и test-results/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 05:17:57 +00:00
root
6cc12346d4 fix: транзакции воронки, trainerId для координаторов, диалог ВПТ, исправления тестов
- funnel.service: обёрнуть moveStage в $transaction, удалять старые записи при смене этапа и назначении
- schedule.controller: координаторы/менеджеры могут указывать trainerId при создании тренировки
- create-training.dto: добавлено опциональное поле trainerId
- web-admin: новый диалог записи на ВПТ (create-vpt-dialog), обновлён reception page
- mobile: исправлен Button компонент, добавлен import в funnel-action
- Исправлены тесты auth, funnel, schedule (310 passed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 04:54:45 +00:00
root
c4fc607590 feat: доработка backend-сервисов и mobile экранов (auth, funnel, schedule, stats, clients)
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
Backend: улучшение auth service, roles guard, JWT strategy, funnel/schedule/stats/users сервисов
Mobile: навигация, экраны clients/funnel/home/schedule, API-сервисы, client-detail экран, типы

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 14:19:51 +00:00
root
424c4c11a4 feat(mobile): Sprint 5 — Expo SDK 54, Clients/Home экраны с API, barrel exports
Some checks failed
CI / Lint & Format (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Build All Apps (push) Has been cancelled
- Обновлен Expo SDK 52 → 54 (React Native 0.81.5, React 19.1, Reanimated 4)
- Реализован экран Clients с поиском, пагинацией и API-интеграцией
- Реализован экран Home с реальными данными: статистика, ближайшие тренировки, долги
- Добавлены barrel-экспорты: funnelService, useFunnelStore
- Удален устаревший babel-плагин reanimated (обрабатывается babel-preset-expo)
- 310/310 unit-тестов проходят, Expo export успешен

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 11:46:44 +00:00