К списку правил

Правила форматирования и структуры проекта

1. Структура проекта

src/
├── app/              # Next.js App Router
├── entities/         # Бизнес-сущности
│   └── user/
│       ├── user.dto.ts           # Типы данных и схемы
│       ├── user.builder.ts       # Билдеры для трансформации данных
│       ├── user.repository.ts    # Работа с API
│       └── user.role.tsx         # Связанные константы и типы
├── features/         # Функциональные компоненты
│   └── user/
│       ├── user.form.tsx         # Формы
│       ├── user.search.tsx       # Поиск
│       └── user.table.tsx        # Таблицы
├── widgets/          # Композиционные компоненты
│   └── user-management/
│       └── user-management.panel.tsx
└── shared/          # Общие утилиты и типы

2. Правила именования

Файлы

Компоненты

3. Структура файла компонента

'use client';  // Для клиентских компонентов

// 1. Импорты
import { ... } from '@mantine/core';          // UI библиотеки
import { ... } from '@tanstack/react-query';  // Утилиты
import { z } from 'zod';                      // Типизация

import { ... } from '@/features/user/...';    // Локальные импорты
import { ... } from '@/entities/user/...';
import { ... } from '@/shared/...';

// 2. Типы и схемы
const SomeSchema = z.object({ ... });

// 3. Вспомогательные функции и хуки
function useHelper() { ... }

// 4. Основной компонент
export function ComponentName() {
  // 4.1 Хуки и состояния
  const [state, setState] = useState();
  const query = useQuery({ ... });

  // 4.2 Обработчики
  function handleAction() { ... }

  // 4.3 Рендер
  return ( ... );
}

4. Декомпозиция компонентов

Паттерны композиции

export const UserTable = {
	Root,
	Actions: {
		Root: ActionsRoot,
		Edit,
		Delete,
	},
};

Формы

Таблицы

Поиск и фильтрация

5. Типизация и валидация

const schema = z.object({
	id: z.number(),
	name: z.string(),
});

6. Работа с данными

Билдеры

export class UserBuilder {
    static fromDTO(dto: UserDTO) { ... }
    buildTableRecord() { ... }
    buildFormValues() { ... }
}

Репозитории

export class UserRepository {
    async getList(params: ListParams) { ... }
    async getById(id: number) { ... }
    async create(data: CreateDTO) { ... }
}

7. Стилизация и UI

8. Обработка ошибок и состояний

9. Переиспользование кода

10. Правила импортов

11. Форматирование кода

12. Документация