diff --git a/.agent/skills/dist/flutter_dev.skill b/.agent/skills/dist/flutter_dev.skill new file mode 100644 index 0000000..706b9a2 Binary files /dev/null and b/.agent/skills/dist/flutter_dev.skill differ diff --git a/.agent/skills/flutter_dev/SKILL.md b/.agent/skills/flutter_dev/SKILL.md new file mode 100644 index 0000000..76a6c38 --- /dev/null +++ b/.agent/skills/flutter_dev/SKILL.md @@ -0,0 +1,32 @@ +--- +name: flutter_dev +description: Скилл для разработки Flutter-приложений по стандартам компании Friflex. Используйте этот скилл при написании кода, создании новых фич, проведении ревью или настройке архитектуры проекта. Включает правила именования, структуру слоев (data/domain/presentation) и стандарты Git. +--- + +# Flutter Dev Skill (Friflex Standards) + +Этот скилл содержит набор правил и инструкций для разработки Flutter-приложений. Основная цель — соблюдение единого стиля кода, архитектурных подходов и процессов разработки. + +## Основные принципы + +1. **Архитектура**: Проект делится на слои: `data`, `domain` и `presentation`. +2. **Именование**: Интерфейсы всегда начинаются с префикса `I`. Экраны имеют постфикс `Screen`. +3. **Документация**: Весь публичный API должен быть покрыт документацией `///`. +4. **Git**: Коммиты и PR на русском языке по стандарту Conventional Commits. + +## Справочники (References) + +Для получения детальной информации по конкретным областям обращайтесь к следующим файлам: + +- [Правила именования и стиль кода](references/codestyle.md) — именование классов, методов, переменных и структура файлов. +- [Структура проекта и слои](references/project_structure.md) — детальное описание папок и взаимодействия между уровнями архитектуры. +- [Работа с Git и ветками](references/gitflow.md) — типы коммитов, именование веток и процессы релизов. +- [Документирование кода](references/documentation.md) — стандарты `///`, использование шаблонов и правила для TODO. +- [Стандарты проекта](references/project_standards.md) — управление сгенерированными файлами, `pubspec.lock` и сборка. + +## Когда использовать этот скилл + +- При создании новых классов или файлов (проверка именования). +- При реализации новой feature (выбор структуры папок). +- Перед созданием Pull Request (проверка соответствия стандартам). +- При возникновении вопросов по архитектурному взаимодействию слоев. diff --git a/.agent/skills/flutter_dev/references/codestyle.md b/.agent/skills/flutter_dev/references/codestyle.md new file mode 100644 index 0000000..dc2b547 --- /dev/null +++ b/.agent/skills/flutter_dev/references/codestyle.md @@ -0,0 +1,34 @@ +# Правила именования и стиль кода + +Мы придерживаемся рекомендаций **Effective Dart** и внутренних правил компании. + +## Именование + +### Интерфейсы +- Начинаются с заглавной буквы **I**. +- Пример: `IAuthRepository`, `IUserRepository`. + +### Классы и файлы +- **Классы**: `UpperCamelCase`. Приватные — с префиксом `_`. Должны содержать тип в конце (например, `UserEntity`). +- **Файлы**: `snake_case`. Структура: `[раздел]_[тип].dart`. Пример: `user_details_screen.dart`. + +### Репозитории +- Основная реализация — без постфикса (`AuthRepository`). +- Альтернативные реализации — с постфиксами: `Network`, `Local`, `Mock`. + +### Виджеты +- **Экраны**: Постфикс `Screen` (`ShopListScreen`). +- **Контент экрана**: Постфикс `View` (`ShopListView`). +- **Глобальные виджеты**: Префикс `App` (`AppButton`). +- В названии **не должно** быть слова `widget`. + +## Методы и переменные +- **Методы**: Начинаются с глагола (`fetch`, `put`, `update`, `delete`). Не должны содержать `And/Or`. +- **Переменные/Константы**: `lowerCamelCase`. + +## Структура класса (порядок элементов) +1. Конструкторы (default, named, factory). +2. Static элементы (methods, const fields). +3. Инстанс-поля (final, потом обычные; public, потом private). +4. Геттеры/Сеттеры. +5. Методы (overridden, public, protected, private). diff --git a/.agent/skills/flutter_dev/references/documentation.md b/.agent/skills/flutter_dev/references/documentation.md new file mode 100644 index 0000000..f89bb84 --- /dev/null +++ b/.agent/skills/flutter_dev/references/documentation.md @@ -0,0 +1,29 @@ +# Документирование кода + +## Документация (///) +- Оформляется с использованием `///` над объектом. +- Обязательна для всех классов, конструкторов, полей, методов и фабрик. +- Должна быть краткой, емкой и указывать на назначение. + +### Шаблоны +- **Классы**: Используйте `{@template name}` и `{@endtemplate}`. +- **Конструкторы**: Если один — `{@macro name}`. +- **Параметры**: Используйте ссылки в квадратных скобках `[paramName]`. + +### Пример метода +```dart +/// Метод для расчета температуры. +/// Принимает: +/// - [grad] - параметр для расчета. +/// Возвращает температуру в градусах. Null при ошибке. +int? calcTemperature({required int grad}) { ... } +``` + +## Комментарии (//) +- Используются только там, где код не очевиден. +- Не должны повторять то, что и так понятно из имен переменных или структуры. + +## TODO +- Формат определяется линтером. +- Указывать имя разработчика в контексте. +- Указывать ссылку на задачу в скобках, если она известна. diff --git a/.agent/skills/flutter_dev/references/gitflow.md b/.agent/skills/flutter_dev/references/gitflow.md new file mode 100644 index 0000000..af2ad7d --- /dev/null +++ b/.agent/skills/flutter_dev/references/gitflow.md @@ -0,0 +1,26 @@ +# Работа с Git и ветками + +## Pull Requests +- Язык описания — **Русский**. +- Описание должно содержать суть изменений, ссылку на задачу и список deprecated-кода. + +## Коммиты (Conventional Commits) +Типы: +- `feat`: Новая функциональность. +- `fix`: Исправление ошибок. +- `refactor`: Рефакторинг без смены логики. +- `docs`: Документация. +- `chore`: Инструменты, зависимости (`pubspec.yaml`). +- `test`, `build`, `ci`. + +## Именование веток +Формат: `тип/PRIME-номер_описание` +- `feat/PRIME-123_auth` +- `fix/PRIME-456_typo` + +## Процесс Feature-разработки +1. Создаем ветку от `main`. +2. Вносим изменения, делаем коммиты. +3. PR с названием по правилам (например, `feat(auth): PRIME-17 Добавить вход`). +4. После Review — **squash commit** в `main`. +5. Удаление ветки. diff --git a/.agent/skills/flutter_dev/references/project_standards.md b/.agent/skills/flutter_dev/references/project_standards.md new file mode 100644 index 0000000..4d2e422 --- /dev/null +++ b/.agent/skills/flutter_dev/references/project_standards.md @@ -0,0 +1,26 @@ +# Стандарты проекта + +## Управление файлами + +### Сгенерированные файлы (*.g.dart, *.freezed.dart) +- **Хранить в репозитории**. +- Это обеспечивает работоспособность `main` ветки сразу после чекаута без долгого ожидания генерации. +- Нужно контролировать конфликты при слиянии и периодически актуализировать. + +### pubspec.lock +- **Хранить** для приложений (applications). +- **Не хранить** для пакетов (packages). +- По умолчанию хранить GMS версию как базовую. + +## Сборка и запуск +- Используйте анализатор `friflex_lint_rules`. +- Перед созданием PR обязательно: + 1. Форматирование кода (`dart format`). + 2. Проверка анализатором на отсутствие ошибок. + +## Технологический стек +- Роутинг: `go_router`. +- State Manager: `flutter_bloc`. +- DI: Ручная реализация через `InheritedWidget`. +- API: `dio`. +- Ресурсы: `flutter_gen`. diff --git a/.agent/skills/flutter_dev/references/project_structure.md b/.agent/skills/flutter_dev/references/project_structure.md new file mode 100644 index 0000000..0e0fb37 --- /dev/null +++ b/.agent/skills/flutter_dev/references/project_structure.md @@ -0,0 +1,33 @@ +# Структура проекта + +Проект строится на основе фич и слоев. + +## Общая иерархия +- `/assets` — графические ресурсы. +- `/lib` — основной код. + - `/app` — глобальные настройки, интерфейсы и реализации. + - `/di` — конфигурация зависимостей. + - `/routing` — описание путей. + - `/features` — функциональные модули приложения. + - `/gen` — сгенерированный код. + +## Структура Feature-папки +Каждая фича делится на три слоя: + +1. **Data** (Поставщик данных): + - `/dto` — модели данных для API. + - `/repository` — реализация интерфейсов репозиториев. +2. **Domain** (Бизнес-логика): + - `/entity` — чистые модели для использования в UI. + - `/repository` — **интерфейсы** репозиториев. + - `/state` — управление состоянием (BLoC). + - `/service` — реализации бизнес-сервисов. +3. **Presentation** (Представление): + - `/screens` — виджеты экранов (`*Screen`). + - `/components` — переиспользуемые компоненты внутри фичи. + +## Правила взаимодействия +- **Data** → доступ к **Entity** (для маппинга), не знает про UI. +- **Domain** → не знает про **Data** (работает через интерфейсы) и **Presentation**. +- **Presentation** → работает через **Domain**, не знает про **Data**. +- Объекты внутри фичи инкапсулированы. Глобальные объекты выносятся в `/app`. diff --git a/.metadata b/.metadata index 2b7c01b..dedebf9 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "be698c48a6750c8cb8e61c740ca9991bb947aba2" + revision: "66dd93f9a27ffe2a9bfc8297506ce066ff51265f" channel: "stable" project_type: app @@ -13,11 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: be698c48a6750c8cb8e61c740ca9991bb947aba2 - base_revision: be698c48a6750c8cb8e61c740ca9991bb947aba2 - - platform: android - create_revision: be698c48a6750c8cb8e61c740ca9991bb947aba2 - base_revision: be698c48a6750c8cb8e61c740ca9991bb947aba2 + create_revision: 66dd93f9a27ffe2a9bfc8297506ce066ff51265f + base_revision: 66dd93f9a27ffe2a9bfc8297506ce066ff51265f + - platform: web + create_revision: 66dd93f9a27ffe2a9bfc8297506ce066ff51265f + base_revision: 66dd93f9a27ffe2a9bfc8297506ce066ff51265f # User provided section