Перейти к содержанию

Чек-листы по вехам и гейту

Сводные чек-листы для самопроверки стажёра и контроля наставника. Детальные чек-листы по каждой вехе — в соответствующих документах M0–M4.

M0 — Старт

См. M0: Старт.

  • .NET 8 SDK установлен
  • IDE (Rider или Visual Studio) работает
  • PostgreSQL запущен, пароль сохранён
  • Git настроен
  • Репозиторий geolab-defense создан и клонирован
  • Скелет решения компилируется
  • Доступы к стенду и Swagger получены и проверены
  • Доступ к geotimlab.wiki получен, заведён первый баг-репорт

M1 — Парсер

См. M1: Парсер.

Доменная модель

  • Project, Borehole, Sample, Sample_Lab, ParameterValue созданы
  • Поля модели сверены с домен-экспертом
  • FK вместо навигационных свойств (DDD-конвенция)

Парсер

  • ILabDataParser объявлен
  • Реализация для CSV работает
  • Реализация для JSON работает
  • LabDataParseResult собирает полный граф объектов
  • Граф объектов корректен, FK согласованы
  • Критические ошибки бросают понятные исключения
  • Некритичные проблемы попадают в Warnings

Тесты

  • Unit-тесты на парсеры (минимум 7 сценариев)
  • Тесты на корректные FK в результате
  • Тесты на обработку ошибок (битый файл, отсутствующие колонки)
  • Все тесты проходят

Инженерная культура

  • Git: коммиты регулярные, сообщения осмысленные
  • Ветки под задачи используются
  • README описывает, как собрать и запустить тесты

M2 — Персистентность

См. M2: Персистентность.

  • GeoLabDefenseDbContext создан
  • Все 5 сущностей сконфигурированы через Fluent API
  • Миграция InitialCreate создана и применяется
  • Парсер → DbContext → SaveChanges → перезапуск → чтение работает
  • Интеграционные тесты проходят
  • Строка подключения в appsettings.json, не в коде

M3 — Web API

См. M3: Web API.

  • Контроллеры для основных сущностей реализованы
  • CRUD покрыт тестами
  • FluentValidation-валидаторы написаны и работают
  • Mapperly-мапперы сгенерированы
  • Хотя бы один OData-эндпоинт работает
  • Ardalis.Specification применён хотя бы один раз
  • NSwag генерирует корректный Swagger UI
  • Serilog пишет логи
  • Эндпоинт запуска парсера по HTTP работает

M4 — UI и подготовка к защите

См. M4: UI и защита.

  • Blazor UI запускается локально
  • Минимум 5 страниц реализованы
  • Загрузка файла в парсер через UI работает end-to-end
  • Radzen используется хотя бы на одной странице
  • README обновлён
  • docs/defense.md написан
  • Демо отрепетировано
  • Code review-вопросы проработаны

QA-трек (параллельно, весь срок)

См. QA-трек.

  • Стабильный поток баг-репортов по форме
  • Корректная классификация severity и context
  • Еженедельные метрики-агрегаты в vault/reports/
  • Обратная связь в vault/feedback/

Гейт защиты

Финальная оценка в конце мес. 5/6. Формат — code review + демо перед тимлидом. Решение: успех → Фаза 2; частично → продление; провал → совместное решение с собственниками.

Что проверяется

Гейт оценивает по трём осям: код и принципы, стек, инженерная зрелость.

Код и принципы

  • Проект защиты работает end-to-end: UI → API → EF Core → PostgreSQL
  • Архитектура соответствует Clean Architecture (направление зависимостей внутрь)
  • DDD-конвенция «только FK» соблюдена
  • Стажёр объясняет свои архитектурные решения
  • Доменная модель сверена с домен-экспертом, расхождения зафиксированы

Стек

  • EF Core + PostgreSQL: схема через миграции, прямой доступ к DbContext
  • FluentValidation: валидаторы работают
  • Mapperly: мапперы генерируются
  • Ardalis.Specification: хотя бы одна спецификация применена
  • OData: хотя бы один эндпоинт поддерживает фильтры
  • NSwag / Swagger: API описан корректно
  • Blazor Server: UI работает с API
  • Radzen: хотя бы одна страница использует компоненты Radzen
  • xUnit: тесты написаны и проходят

Инженерная зрелость

  • Git-гигиена: осмысленные коммиты, ветки под задачи
  • Обработка ошибок: нет «тихих» падений, понятные сообщения
  • Код читаемый, именование согласованное
  • README с инструкцией запуска
  • docs/defense.md с архитектурой и демо-сценарием
  • QA-трек: стабильный поток качественных репортов и метрик
  • Способность ответить на технические вопросы по своему коду

Примеры вопросов на code review

Не исчерпывающий список, ориентир для подготовки:

  • «Покажи направление зависимостей в твоём решении. Почему так?»
  • «Почему здесь .Select() до материализации, а не .Include() + маппинг в памяти?»
  • «Где ты используешь спецификацию? Почему именно здесь?»
  • «Объясни, как валидируется этот DTO. Почему FluentValidation?»
  • «Как соблюдается конвенция „только FK“ в твоей схеме БД?»
  • «Что произойдёт, если в парсер подать битый файл? Покажи обработку ошибки.»

После гейта

При успешном прохождении — переход в Фазу 2:

  • Оплачиваемая роль Dev junior.
  • Доступ к основному репозиторию DeepGeo.
  • Простые задачи под присмотром dev-ментора: simple Query, правка UI-компонента, integration-тесты в tests/ai_generated/.

Темы, вынесенные за рамки Фазы 1 и изучаемые в Фазе 2: мультитенантность, MediatR на практике, продвинутый DDD, Blazor WebAssembly, Docker, CI/CD, безопасность.


Дальше