Skip to content

feat: упрощённая регистрация (Имя+Фамилия) + статистика пользователей - #90

Merged
NovakPAai merged 2 commits into
mainfrom
claude/jack-registration-form-and-user-stats
Apr 22, 2026
Merged

feat: упрощённая регистрация (Имя+Фамилия) + статистика пользователей#90
NovakPAai merged 2 commits into
mainfrom
claude/jack-registration-form-and-user-stats

Conversation

@NovakPAai

Copy link
Copy Markdown
Owner

Summary

  • Форма регистрации: только Имя и Фамилия — email заполняется автоматически как имя.фамилия@flowtask.dev (транслитерация кириллицы в латиницу, разделитель точка — как у novak.pavel@flowtask.dev)
  • Заявки: предзаполненные профили уходят в раздел «Заявки» как раньше — без изменений в бэкенде
  • Раздел «Пользователи»: добавлены колонки Спейсы / Доски / Задачи / Участники / Активность; под именем — дата создания аккаунта

Изменения

Файл Что изменено
frontend/src/pages/LoginPage.tsx Разбивка имени, транслитерация, email-превью
frontend/src/pages/AdminUsersPage.tsx 9 колонок вместо 6, статистика в строках
frontend/src/types/index.ts Новый тип AdminUserStats, поле stats в AdminUser
backend/src/modules/admin/admin.service.ts Prisma _count + агрегация досок/участников

Test plan

  • Форма регистрации: ввести «Иван Петров» → в превью должно появиться ivan.petrov@flowtask.dev
  • Форма регистрации: ввести «Мария Сидорова» → maria.sidorova@flowtask.dev
  • Нажать «Зарегистрироваться» → заявка попадает в раздел «Заявки» админки
  • В таблице пользователей: видны колонки Спейсы, Доски, Задачи, Участники
  • Пользователь без активности показывает в цифровых колонках

🤖 Generated with Claude Code

Форма регистрации:
- Разбить поле «Имя» на «Имя» и «Фамилию» (два отдельных инпута)
- Email заполняется автоматически: имя.фамилия@flowtask.dev
- Транслитерация кириллицы → латиница (иван.петров → ivan.petrov)
- Домен flowtask.dev подставляется сразу (как у novak.pavel@flowtask.dev)
- Предзаполненные профили отправляются в заявки как и раньше

Раздел «Пользователи» (AdminUsersPage):
- Добавить колонки: Спейсы, Доски, Задачи, Участники, Активность
- Под именем показывать дату создания аккаунта

Backend (admin.service.ts):
- listUsers() дополнить агрегацией: кол-во спейсов, досок, задач и участников
  через Prisma _count + вложенные createdWorkspaces
Код:
- й → 'y' (было 'i') — транслитерация имён корректна (Андрей→andrey, Сергей→sergey)
- emailPrefix вычисляется через useMemo, не 4× за рендер
- Guard на пустой prefix перед отправкой заявки
- Упрощено условие показа email-поля (!showRegister || !registrationDomain)
- Кнопка disabled по !emailPrefix дополнительно

UX:
- icon="person" (силуэт) на полях Имя/Фамилия вместо envelope
- Email-превью заменён на <input readOnly aria-label> — доступен с клавиатуры
- Подпись "Генерируется из имени и фамилии" под лейблом Email
- Плейсхолдер "имя.фамилия@flowtask.dev" вместо конкретного примера
- Текст кнопки "Отправить заявку" (не "Зарегистрироваться")

Security:
- listRegistrationRequests: explicit select — bcrypt-хэш больше не попадает в ответ API

E2E:
- e2e/flows/registration-autofill.spec.ts — авто-email, disable/enable кнопки
- e2e/flows/admin-users-stats.spec.ts — колонки статистики, access guard
@NovakPAai

Copy link
Copy Markdown
Owner Author

Ревью-правки применены (2-й коммит)

Code review

  • й'y' (было 'i') — Андрей→andrey, Сергей→sergey
  • emailPrefix через useMemo — вычисляется 1× вместо 4× за рендер
  • ✅ Guard на пустой prefix перед отправкой (message.error + early return)
  • ✅ Упрощено условие: (!showRegister || (showRegister && !registrationDomain))(!showRegister || !registrationDomain)
  • ⚠️ listUsers N×W memory — откладываем на отдельный тикет (admin-only, масштаб пока мал)

Security

  • listRegistrationRequests: добавлен explicit select — bcrypt-хэш больше не попадает в API-ответ
  • ⚠️ createdWorkspaces eager-load рефакторинг → отдельный тикет

UX

  • icon="person" на полях Имя/Фамилия (был envelope)
  • ✅ Email-превью: <input readOnly aria-label> вместо <div> — доступен с клавиатуры/screen reader
  • ✅ Подпись «Генерируется из имени и фамилии» под лейблом Email
  • ✅ Плейсхолдер имя.фамилия@flowtask.dev вместо конкретного примера
  • ✅ Кнопка: «Отправить заявку» вместо «Зарегистрироваться»

E2E

  • e2e/flows/registration-autofill.spec.ts — 8 тестов: авто-email, транслитерация, disable/enable кнопки
  • e2e/flows/admin-users-stats.spec.ts — 16 тестов: колонки, guard доступа, переключение табов

@NovakPAai
NovakPAai merged commit 0e30425 into main Apr 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants