Архитектура
Архитектура
Как взаимодействуют web-приложение, worker, PostgreSQL и внешние каналы.
Customer Support состоит из двух процессов, собранных из одного репозитория. Web обслуживает интерфейс, авторизацию, API и Server Actions. Worker отвечает за плановый сбор отзывов и фоновые уведомления. Общее состояние хранится в PostgreSQL.
Границы модулей
| Каталог | Ответственность |
|---|---|
src/app | Маршруты, layouts и серверные проверки доступа |
src/features/feedback | App Feedback, providers, sync, ответы и уведомления |
src/features/qr-feedback | Entities, QR-коды, публичные отправки и аналитика |
src/features/access-control | Пользователи, роли, permissions и Audit Log |
src/features/settings | Брендинг, безопасность и UI интеграций |
src/components/ui | Универсальные shadcn primitives без бизнес-логики |
src/lib | Prisma, Better Auth, SMTP и серверная безопасность |
Client Components не обращаются к Prisma и внешним provider API напрямую. Мутации проходят через Server Actions или API routes и повторно проверяют права.
Ключевые решения
- scheduled sync вынесен из Next.js в отдельный worker;
- импорт повторяем и идемпотентен благодаря уникальному внешнему ID;
- атомарные leases защищают от двух одновременных sync;
- credentials шифруются до записи в БД;
- workflow обращения отделён от состояния ответа на внешней площадке;
- QR-отправки immutable, удаление логическое;
- audit содержит безопасные метаданные, но не секреты и не полные тексты.

