fix: исправить условие «нуждается в привязке» для проектов-сериалов#4131
fix: исправить условие «нуждается в привязке» для проектов-сериалов#4131claude[bot] wants to merge 3 commits intomasterfrom
Conversation
Проекты-сериалы пропадали из выборки, если хотя бы одна привязанная КИ-игра завершилась менее 60 дней назад. Новое условие: показывать проект как кандидата привязки если привязок нет совсем, или все привязанные игры уже прошли (End < now) И в проекте продолжается активность (обновление <60 дней). Closes #3860 Co-authored-by: Leonid Tsarev <leotsarev@users.noreply.github.com>
|
@claude мне кажется ошибка в логике. Давай напишем юнит тесты на условие фильтрации, и так разберемся все ли верно. |
|
Claude finished @leotsarev's task in 6m 36s —— View job Юнит-тесты добавлены
Что сделано: Логика фильтрации вынесена из 16 тестов, все зелёные:
Если у КИ-игры |
Вынесен предикат фильтрации в KogdaIgraMissingGamesPredicate.NeedsBinding() для тестируемости. Добавлены 16 тестов, покрывающих все граничные случаи: нет привязок, будущие/прошедшие игры, граница 60 дней, неактивные привязки, смешанный сериал, End=null. Co-authored-by: Leonid Tsarev <leotsarev@users.noreply.github.com>
| /// 1. Нет активных КИ-привязок вообще, ИЛИ | ||
| /// 2. Все привязанные КИ-игры уже завершились (End < now) И проект недавно обновлялся (<60 дней) | ||
| /// </summary> | ||
| public static bool NeedsBinding( |
There was a problem hiding this comment.
Так работать не будет — нам нужно возвращать из этого метода Expression<Func<<>> иначе результат не будет транслироваться на сторону EF
There was a problem hiding this comment.
Используй LinqKit чтобы переиспользовать предикаты. Добавь информацию о использовании LINQKIT в документацию (создай отдельный файлик который описывает как писать Linq запросы с помощью LinqKit и сошлись на него в CLAUDE.MD
| /// <summary> | ||
| /// Определяет, нуждается ли проект в привязке к КогдаИгра. | ||
| /// Проект попадает в выборку если: | ||
| /// 1. Нет активных КИ-привязок вообще, ИЛИ |
There was a problem hiding this comment.
Давай условие DisableKogdaIgraMapping занесем внутрь этого метода
|
Claude finished @leotsarev's task in 6m 27s —— View job Исправление по замечаниям ревью
Что сделано
Тесты — обновлены: создают
|
…gdaIgraMissingGamesPredicate - GetPredicate() возвращает Expression для трансляции в SQL через LinqKit - DisableKogdaIgraMapping и Active перенесены внутрь предиката - ProjectRepository.GetKogdaIgraMissingGames использует predicate.Invoke() - Тесты обновлены: создают Project-объекты и вызывают GetPredicate().Compile()() - Добавлены тесты на DisableKogdaIgraMapping=true и Active=false - Создан docs/linq-queries.md с документацией по LinqKit-паттерну - CLAUDE.md обновлён со ссылкой на docs/linq-queries.md Co-authored-by: Leonid Tsarev <leotsarev@users.noreply.github.com>
Что сделано
GetKogdaIgraMissingGames()вProjectRepository.csПроблема: Проекты-сериалы пропадали из выборки «надо привязать», если хотя бы одна из привязанных КИ-игр завершилась менее 60 дней назад. Условие
hasNonStaleKogdaIgra(игра сEnd > now - 60 дней) исключало весь проект, даже если все игры фактически уже прошли.Новое условие: Показывать проект как кандидата привязки если:
End < now) И в проекте продолжается активность (обновление за последние 60 дней)Closes #3860
Generated with Claude Code