Skip to content

Conversation

kodermax
Copy link
Contributor

@kodermax kodermax commented Aug 6, 2025

Summary by CodeRabbit

  • Новые функции

    • Добавлена поддержка переменной окружения NEXT_PUBLIC_APP_URL для конфигурирования URL приложения на клиенте.
    • Введены новые схемы и типы для валидации и работы с администраторами и их приглашениями.
    • Обновлена логика копирования ссылки приглашения администратора — теперь используется новая переменная окружения.
  • Обновление типов

    • Изменён тип данных приглашений в таблице приглашённых администраторов для поддержки новых структур.
  • Прочее

    • Обновлены зависимости типов и схем для работы с администраторами.

Copy link
Contributor

coderabbitai bot commented Aug 6, 2025

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Обзор изменений

В проект были добавлены новые схемы валидации и типы для администраторов и приглашений, а также переменная окружения NEXT_PUBLIC_APP_URL, которая теперь используется для формирования ссылок приглашения. Соответствующие изменения внесены в workflow, Dockerfile, конфигурацию окружения и компоненты, связанные с администраторами.

Изменения

Cohort / File(s) Краткое описание изменений
GitHub Actions и Docker
.github/workflows/app.yml, apps/app/Dockerfile
Добавлена переменная окружения NEXT_PUBLIC_APP_URL в workflow и Dockerfile; теперь она доступна на этапе сборки и в окружении контейнера.
Конфигурация окружения
apps/app/src/env.ts
В клиентскую схему окружения добавлена переменная NEXT_PUBLIC_APP_URL с валидацией URL; переменная также добавлена в experimental__runtimeEnv.
Типы и схемы валидации администраторов
packages/validators/src/admins.ts
Добавлены схемы и типы: adminSchema, adminListResponseSchema, adminInvitationSchema, а также типы Admin, AdminListResponse, AdminInvitation для API-ответов, связанных с администраторами и их приглашениями.
Компоненты приглашений администраторов
apps/app/src/features/admins/components/invited-admins-table.tsx
Изменён тип пропса invitations с InvitedAdmin[] на AdminInvitation[]; для формирования ссылки приглашения теперь используется env.NEXT_PUBLIC_APP_URL вместо env.APP_URL.
Страница администраторов
apps/app/src/features/admins/pages/AdminsPage.tsx
В импорт типов добавлены createAdminSchema и updateAdminSchema из @qco/validators для использования валидации форм создания/редактирования администратора.

Диаграмма последовательности

sequenceDiagram
    participant User
    participant UI (InvitedAdminsTable)
    participant env.ts
    participant Clipboard

    User->>UI (InvitedAdminsTable): Копировать ссылку приглашения
    UI (InvitedAdminsTable)->>env.ts: Получить NEXT_PUBLIC_APP_URL
    UI (InvitedAdminsTable)->>Clipboard: Сформировать и скопировать ссылку с NEXT_PUBLIC_APP_URL
Loading

Оценка трудозатрат на ревью

🎯 2 (Простое) | ⏱️ ~8 минут

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between be92f02 and 7bf61bc.

📒 Files selected for processing (1)
  • .github/workflows/app.yml (2 hunks)
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
apps/app/src/features/admins/components/invited-admins-table.tsx (1)

58-58: Несоответствие в использовании переменной окружения.

В функции handleShareInvitationLink по-прежнему используется env.APP_URL, в то время как в handleCopyInvitationLink была изменена на env.NEXT_PUBLIC_APP_URL. Это создает несоответствие и может привести к проблемам.

Примените этот diff для исправления несоответствия:

-    const invitationLink = `${env.APP_URL}/admin-invitation/${token}`;
+    const invitationLink = `${env.NEXT_PUBLIC_APP_URL}/admin-invitation/${token}`;
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 182f5bf and be92f02.

📒 Files selected for processing (6)
  • .github/workflows/app.yml (1 hunks)
  • apps/app/Dockerfile (1 hunks)
  • apps/app/src/env.ts (2 hunks)
  • apps/app/src/features/admins/components/invited-admins-table.tsx (2 hunks)
  • apps/app/src/features/admins/pages/AdminsPage.tsx (1 hunks)
  • packages/validators/src/admins.ts (3 hunks)
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (.cursor/rules/code.mdc)

**/*.{ts,tsx}: Use strict typing in TypeScript and avoid any.
Use environment variables or @t3-oss/env-core for experimental feature flags.

Files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/features/admins/components/invited-admins-table.tsx
  • apps/app/src/env.ts
  • packages/validators/src/admins.ts
**/*.{tsx,jsx}

📄 CodeRabbit Inference Engine (.cursor/rules/trpc.mdc)

**/*.{tsx,jsx}: When using tRPC with React Query, always generate query options using trpc.<namespace>.<procedure>.queryOptions() and pass them to useQuery instead of calling the procedure directly.
When using tRPC mutations with React Query, always generate mutation options using trpc.<namespace>.<procedure>.mutationOptions() and pass them to useMutation instead of calling the procedure directly.
After a successful mutation that affects a list, invalidate the relevant query cache using queryClient.invalidateQueries with the correct query key from tRPC.
Display user feedback (such as toast notifications) on mutation success or error using the toast function.

Files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/features/admins/components/invited-admins-table.tsx
**/*.{jsx,tsx}

📄 CodeRabbit Inference Engine (.windsurfrules)

**/*.{jsx,tsx}: Use Lucide React for icons throughout the application.
Use TanStack Query (react-query) for frontend data fetching.
Use React Hook Form for form handling.
Use React Context for state management.
Use the useTRPC hook for accessing tRPC procedures.
Use queryClient.invalidateQueries for cache invalidation after mutations.

Files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/features/admins/components/invited-admins-table.tsx
**/*.tsx

⚙️ CodeRabbit Configuration File

**/*.tsx: ПРИНЦИПЫ РАЗРАБОТКИ REACT КОМПОНЕНТОВ:

  1. Именование и стиль кода:

    • Имена файлов обязательно в kebab-case (например: my-component.tsx, user-profile.tsx)
    • Компоненты в PascalCase, функции в camelCase, константы в UPPER_SNAKE_CASE
    • Имена компонентов должны четко отражать их назначение и функциональность
    • Избегайте сокращений в именах компонентов
    • Поддерживайте консистентность в стиле кода
    • Следуйте принципам чистого кода (DRY, SOLID, KISS)
  2. TypeScript и типизация:

    • Используйте строгую типизацию для всех пропсов компонентов
    • Избегайте any, unknown и {} где это возможно
    • Правильно типизируйте события и колбэки
    • Используйте дженерики для переиспользуемых компонентов
    • Создавайте интерфейсы для пропсов компонентов
    • Типизируйте состояние компонентов
    • Используйте утилитарные типы React (ComponentProps, PropsWithChildren, etc.)
  3. React и Next.js лучшие практики:

    • Оптимизируйте React компоненты (используйте мемоизацию, поддерживайте правильную структуру)
    • Правильно используйте хуки (useEffect, useState, useCallback, useMemo)
    • Предотвращайте утечки памяти в useEffect
    • Корректно реализуйте серверные и клиентские компоненты в Next.js
    • Оптимизируйте стратегии маршрутизации и загрузки данных (SSR, SSG, ISR)
    • Используйте React.memo для предотвращения ненужных ре-рендеров
    • Правильно управляйте зависимостями в useEffect
    • Избегайте создания объектов и функций в рендере
  4. Производительность компонентов:

    • Оптимизируйте рендеринг списков с помощью виртуализации при необходимости
    • Используйте lazy loading для компонентов
    • Минимизируйте количество ре-рендеров
    • Правильно используйте key пропы в списках
    • Избегайте встроенных объектов и функций в JSX
    • Используйте Code Splitting для больших компонентов
  5. Управление состоянием:

    • Поднимайте состояние только когда это необходимо
    • Используйте локальное состояние где это возможно
    • Правильно структурируйте сост...

Files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/features/admins/components/invited-admins-table.tsx
**/*.ts

📄 CodeRabbit Inference Engine (.windsurfrules)

Use Zod for validation.

Files:

  • apps/app/src/env.ts
  • packages/validators/src/admins.ts

⚙️ CodeRabbit Configuration File

**/*.ts: ОСНОВНЫЕ ПРИНЦИПЫ РАЗРАБОТКИ:

  1. Именование и стиль кода:

    • Имена файлов обязательно в kebab-case (например: my-component.ts, user-profile.tsx)
    • Функции в camelCase, компоненты в PascalCase, константы в UPPER_SNAKE_CASE
    • Имена переменных и функций должны четко отражать их назначение и реализацию
    • Избегайте сокращений и аббревиатур в именах (кроме общепринятых)
    • Поддерживайте консистентность в стиле кода (отступы, пробелы, переносы строк)
    • Следуйте принципам чистого кода (DRY, SOLID, KISS)
    • Используйте осмысленные имена для булевых переменных (isLoading, hasPermission, canEdit)
  2. TypeScript и типизация:

    • Используйте строгую типизацию и избегайте any, unknown и {} где это возможно
    • Правильно применяйте дженерики, интерфейсы и типы
    • Обеспечивайте корректные определения типов для параметров функций и возвращаемых значений
    • Предпочитайте union и intersection типы сложным условным конструкциям
    • Используйте утилитарные типы TypeScript (Pick, Omit, Partial, Required)
    • Создавайте переиспользуемые типы и интерфейсы
    • Избегайте дублирования типов, выносите общие типы в отдельные файлы
  3. Соблюдение правил линтера:

    • Следуйте правилам ESLint для React и TypeScript
    • Соблюдайте рекомендации Biome по форматированию и анализу кода
    • Убедитесь, что код не содержит предупреждений или ошибок линтера
    • Используйте автоматическое форматирование кода
  4. Алгоритмы и производительность:

    • Пишите понятные и читаемые алгоритмы, которые могут понять другие разработчики
    • Оптимизируйте сложность алгоритмов (временную и пространственную)
    • Избегайте чрезмерной вложенности и сложности
    • Правильно обрабатывайте граничные случаи и ошибки
    • Используйте подходящие структуры данных для задач
    • Применяйте мемоизацию где это уместно
  5. Безопасность и стабильность:

    • Реализуйте правильную валидацию входных данных и защиту от инъекций
    • Корректно обрабатывайте ошибки и исключения
    • Обеспечивайте...

Files:

  • apps/app/src/env.ts
  • packages/validators/src/admins.ts
{packages/web-api/**,packages/api/**,packages/web-validators/**,packages/validators/**}

📄 CodeRabbit Inference Engine (.cursor/rules/code.mdc)

Use the same Zod schemas on both frontend and backend. Import schemas from /packages/web-validators (for web) and /packages/validators (for app) to guarantee unified validation and type safety.

Files:

  • packages/validators/src/admins.ts
{packages/web-validators/**,packages/validators/**}

📄 CodeRabbit Inference Engine (.cursor/rules/code.mdc)

Use Zod/v4 schemas from /packages/web-validators (web) and /packages/validators (app) for type safety.

Files:

  • packages/validators/src/admins.ts
packages/validators/**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (.windsurfrules)

Validation schemas are stored in @qco/validators.

Files:

  • packages/validators/src/admins.ts
🧠 Learnings (20)
📚 Learning: applies to packages/validators/**/*.{ts,tsx} : validation schemas are stored in `@qco/validators`....
Learnt from: CR
PR: qcohq/qco#0
File: .windsurfrules:0-0
Timestamp: 2025-08-01T07:58:22.450Z
Learning: Applies to packages/validators/**/*.{ts,tsx} : Validation schemas are stored in `qco/validators`.

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to apps/web/**/*.tsx : import table schemas from @qco/db/schema, e.g., import { category, pr...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/web-api.mdc:0-0
Timestamp: 2025-08-01T07:58:07.363Z
Learning: Applies to apps/web/**/*.tsx : Import table schemas from qco/db/schema, e.g., import { Category, ProductCategory } from "qco/db/schema";

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/features/admins/components/invited-admins-table.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to packages/api/**/*.ts : import schemas from @qco/db/schema, e.g., import { category, produ...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/api.mdc:0-0
Timestamp: 2025-08-01T07:57:06.890Z
Learning: Applies to packages/api/**/*.ts : Import schemas from qco/db/schema, e.g., import { Category, ProductCategory } from "qco/db/schema";

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to apps/web/**/*.tsx : use zod for input and output validation, importing from @qco/web-vali...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/web-api.mdc:0-0
Timestamp: 2025-08-01T07:58:07.363Z
Learning: Applies to apps/web/**/*.tsx : Use Zod for input and output validation, importing from qco/web-validators

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/env.ts
  • packages/validators/src/admins.ts
📚 Learning: applies to {packages/web-api/**,packages/api/**,packages/web-validators/**,packages/validators/**} :...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/code.mdc:0-0
Timestamp: 2025-08-01T07:57:26.911Z
Learning: Applies to {packages/web-api/**,packages/api/**,packages/web-validators/**,packages/validators/**} : Use the same Zod schemas on both frontend and backend. Import schemas from `/packages/web-validators` (for web) and `/packages/validators` (for app) to guarantee unified validation and type safety.

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • apps/app/src/env.ts
  • packages/validators/src/admins.ts
📚 Learning: applies to packages/api/**/*.ts : use zod for input and output validation, importing from @qco/valid...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/api.mdc:0-0
Timestamp: 2025-08-01T07:57:06.890Z
Learning: Applies to packages/api/**/*.ts : Use Zod for input and output validation, importing from qco/validators.

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to packages/db/**/*.{ts,js} : database schemas are defined in `@qco/db`....
Learnt from: CR
PR: qcohq/qco#0
File: .windsurfrules:0-0
Timestamp: 2025-08-01T07:58:22.450Z
Learning: Applies to packages/db/**/*.{ts,js} : Database schemas are defined in `qco/db`.

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to {packages/web-validators/**,packages/validators/**} : use zod/v4 schemas from `/packages/...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/code.mdc:0-0
Timestamp: 2025-08-01T07:57:26.911Z
Learning: Applies to {packages/web-validators/**,packages/validators/**} : Use Zod/v4 schemas from `/packages/web-validators` (web) and `/packages/validators` (app) for type safety.

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to packages/api/**/*.ts : import functions like eq, sql from @qco/db, e.g., import { eq, sql...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/api.mdc:0-0
Timestamp: 2025-08-01T07:57:06.890Z
Learning: Applies to packages/api/**/*.ts : Import functions like eq, sql from qco/db, e.g., import { eq, sql } from "qco/db";

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
📚 Learning: applies to apps/web/**/*.tsx : import drizzle orm functions like eq, sql from @qco/db, e.g., import ...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/web-api.mdc:0-0
Timestamp: 2025-08-01T07:58:07.363Z
Learning: Applies to apps/web/**/*.tsx : Import Drizzle ORM functions like eq, sql from qco/db, e.g., import { eq, sql } from "qco/db";

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
📚 Learning: applies to **/*.{tsx} : обязательно импортируйте zodresolver, useform, z, и компоненты формы из '@/c...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Обязательно импортируйте zodResolver, useForm, z, и компоненты формы из '@/components/ui/form' при работе с формами

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : инициализируйте форму с помощью useform и указывайте resolver: zodresolver(f...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Инициализируйте форму с помощью useForm и указывайте resolver: zodResolver(formSchema) и defaultValues

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : всегда создавайте zod схему для валидации данных формы...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Всегда создавайте Zod схему для валидации данных формы

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : обработчик отправки формы должен принимать значения, типизированные через z....
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Обработчик отправки формы должен принимать значения, типизированные через z.infer<typeof formSchema>

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : всегда используйте react hook form с компонентами shadcn/ui при создании фор...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Всегда используйте React Hook Form с компонентами shadcn/ui при создании форм в проекте

Applied to files:

  • apps/app/src/features/admins/pages/AdminsPage.tsx
📚 Learning: applies to **/*.{jsx,tsx} : use lucide react for icons throughout the application....
Learnt from: CR
PR: qcohq/qco#0
File: .windsurfrules:0-0
Timestamp: 2025-08-01T07:58:22.450Z
Learning: Applies to **/*.{jsx,tsx} : Use Lucide React for icons throughout the application.

Applied to files:

  • apps/app/src/features/admins/components/invited-admins-table.tsx
📚 Learning: applies to **/*.{ts,tsx} : use environment variables or `@t3-oss/env-core` for experimental feature ...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/code.mdc:0-0
Timestamp: 2025-08-01T07:57:26.911Z
Learning: Applies to **/*.{ts,tsx} : Use environment variables or `t3-oss/env-core` for experimental feature flags.

Applied to files:

  • apps/app/src/env.ts
📚 Learning: applies to **/*.ts : use zod for validation....
Learnt from: CR
PR: qcohq/qco#0
File: .windsurfrules:0-0
Timestamp: 2025-08-01T07:58:22.450Z
Learning: Applies to **/*.ts : Use Zod for validation.

Applied to files:

  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : всегда добавляйте валидацию на клиенте с помощью zod...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Всегда добавляйте валидацию на клиенте с помощью Zod

Applied to files:

  • packages/validators/src/admins.ts
📚 Learning: applies to **/*.{tsx} : используйте примеры валидации с помощью zod для email, password, обязательны...
Learnt from: CR
PR: qcohq/qco#0
File: .cursor/rules/form.mdc:0-0
Timestamp: 2025-08-01T07:57:49.264Z
Learning: Applies to **/*.{tsx} : Используйте примеры валидации с помощью Zod для email, password, обязательных полей, чисел и массивов

Applied to files:

  • packages/validators/src/admins.ts
🧬 Code Graph Analysis (1)
apps/app/src/features/admins/components/invited-admins-table.tsx (2)
packages/validators/src/admins.ts (1)
  • AdminInvitation (169-169)
apps/app/src/env.ts (1)
  • env (6-41)
🔇 Additional comments (9)
apps/app/src/env.ts (1)

15-15: Отличная реализация переменной окружения

Переменная NEXT_PUBLIC_APP_URL правильно добавлена в клиентскую схему с валидацией URL и включена в experimental__runtimeEnv. Реализация следует лучшим практикам TypeScript и Zod.

Also applies to: 35-35

packages/validators/src/admins.ts (3)

16-36: Хорошо структурированные схемы администраторов

Схемы adminSchema и adminListResponseSchema правильно реализованы с корректной типизацией и валидацией. Пагинация в adminListResponseSchema следует стандартному паттерну.


122-133: Корректная схема приглашений администраторов

Схема adminInvitationSchema правильно обрабатывает все поля приглашения, включая опциональный invitationToken и nullable name. Валидация соответствует требованиям.


169-171: Правильный экспорт TypeScript типов

Типы AdminInvitation, Admin и AdminListResponse корректно выведены из Zod схем с использованием z.infer, что обеспечивает типобезопасность.

apps/app/src/features/admins/pages/AdminsPage.tsx (1)

11-16: Правильный импорт схем валидации

Импорт расширен для включения createAdminSchema и updateAdminSchema, что соответствует принципам использования единых Zod схем из пакета @qco/validators для типобезопасности.

apps/app/Dockerfile (1)

37-38: Правильная реализация переменной окружения в Dockerfile

Переменная NEXT_PUBLIC_APP_URL корректно объявлена как аргумент сборки и переменная окружения, следуя тому же паттерну, что и NEXT_PUBLIC_WEB_APP_URL.

Примечание: Для корректной работы необходимо исправить передачу аргумента сборки в GitHub Actions workflow (см. комментарий к файлу .github/workflows/app.yml).

apps/app/src/features/admins/components/invited-admins-table.tsx (3)

16-16: Правильное обновление типа импорта.

Изменение типа с InvitedAdmin на AdminInvitation соответствует новому типу из пакета валидаторов и улучшает типизацию.


19-19: Корректное обновление типа пропса.

Обновление типа пропса invitations с InvitedAdmin[] на AdminInvitation[] согласуется с изменением импорта и обеспечивает строгую типизацию.


38-38: Исправлена переменная окружения для клиентской стороны.

Изменение с env.APP_URL на env.NEXT_PUBLIC_APP_URL корректно, поскольку переменная используется на клиентской стороне для формирования ссылки приглашения.

@kodermax kodermax merged commit 90adeff into main Aug 6, 2025
0 of 3 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.

1 participant