Refactor GridPlanner to improve slot fitting logic and enhance code clarity
ci / build-backend (push) Successful in 2m32s
ci / build-frontend (push) Successful in 1m9s
ci / tests (push) Successful in 2m35s
ci / sonar (push) Successful in 8m6s

Reintroduced the Fit method in the GridPlanner class with detailed documentation, clarifying the logic for determining slot duration based on available space. This change enhances the readability and maintainability of the code while ensuring accurate slot management during grid generation.
This commit is contained in:
Leonid Pershin
2026-07-27 23:48:44 +03:00
parent 1afe01aed8
commit 16b3c485d7
@@ -360,6 +360,19 @@ public sealed class GridPlanner(
PlanRun Run
)
{
/// <summary>
/// Длина слота: желаемая, но не больше свободного места. Остаток короче минимального слота
/// приклеивается к текущему — огрызок в сетке читается как ошибка, а не как решение. Остаток
/// побольше достанется следующему слоту, и под него подберут группу подходящей длины.
/// </summary>
private static int Fit(int wanted, int available)
{
var duration = Math.Min(Round(wanted), available);
return available - duration < MinSlotMinutes
? available
: Math.Max(duration, MinSlotMinutes);
}
/// <summary>
/// Длина слота и число единиц в нём. Блок из N единиц занимает ровно столько, сколько эти
/// единицы идут, — округление до пяти минут; хвост короче минимального слота приклеивается
@@ -461,19 +474,6 @@ public sealed class GridPlanner(
private static int RepeatMinutes(GridBand band) =>
band.BlockMinutes > 0 ? band.BlockMinutes : 120;
/// <summary>
/// Длина слота: желаемая, но не больше свободного места. Остаток короче минимального слота
/// приклеивается к текущему — огрызок в сетке читается как ошибка, а не как решение. Остаток
/// побольше достанется следующему слоту, и под него подберут группу подходящей длины.
/// </summary>
private static int Fit(int wanted, int available)
{
var duration = Math.Min(Round(wanted), available);
return available - duration < MinSlotMinutes
? available
: Math.Max(duration, MinSlotMinutes);
}
private static int Round(int minutes) =>
Math.Max(SlotStepMinutes, minutes / SlotStepMinutes * SlotStepMinutes);