4.8.6: Исправлена сортировка заблокированных желаний
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m20s

This commit is contained in:
poignatov
2026-02-02 20:59:37 +03:00
parent 8ffbfc6afd
commit ebe71f073c
3 changed files with 21 additions and 12 deletions

View File

@@ -10178,14 +10178,14 @@ func (a *App) getWishlistHandler(w http.ResponseWriter, r *http.Request) {
}
}
// Сортируем каждую группу по времени разблокировки (от большего срока к меньшему)
// Сортируем каждую группу по времени разблокировки (от меньшего срока к большему)
sort.Slice(lockedWithoutTasks, func(i, j int) bool {
valueI := a.calculateLockedSortValue(lockedWithoutTasks[i], userID)
valueJ := a.calculateLockedSortValue(lockedWithoutTasks[j], userID)
if valueI == valueJ {
return lockedWithoutTasks[i].ID < lockedWithoutTasks[j].ID
}
return valueI > valueJ
return valueI < valueJ
})
sort.Slice(lockedWithTasks, func(i, j int) bool {
@@ -10194,7 +10194,7 @@ func (a *App) getWishlistHandler(w http.ResponseWriter, r *http.Request) {
if valueI == valueJ {
return lockedWithTasks[i].ID < lockedWithTasks[j].ID
}
return valueI > valueJ
return valueI < valueJ
})
// Объединяем: сначала без задач, потом с задачами
@@ -12521,14 +12521,14 @@ func (a *App) getBoardItemsHandler(w http.ResponseWriter, r *http.Request) {
}
}
// Сортируем каждую группу по времени разблокировки (от большего срока к меньшему)
// Сортируем каждую группу по времени разблокировки (от меньшего срока к большему)
sort.Slice(lockedWithoutTasks, func(i, j int) bool {
valueI := a.calculateLockedSortValue(lockedWithoutTasks[i], userID)
valueJ := a.calculateLockedSortValue(lockedWithoutTasks[j], userID)
if valueI == valueJ {
return lockedWithoutTasks[i].ID < lockedWithoutTasks[j].ID
}
return valueI > valueJ
return valueI < valueJ
})
sort.Slice(lockedWithTasks, func(i, j int) bool {
@@ -12537,7 +12537,7 @@ func (a *App) getBoardItemsHandler(w http.ResponseWriter, r *http.Request) {
if valueI == valueJ {
return lockedWithTasks[i].ID < lockedWithTasks[j].ID
}
return valueI > valueJ
return valueI < valueJ
})
// Объединяем: сначала без задач, потом с задачами
@@ -12799,6 +12799,7 @@ func (a *App) calculateLockedSortValue(item WishlistItem, userID int) float64 {
maxWeeks := 0.0
hasProjectConditions := false
allCompleted := true
for _, condition := range item.UnlockConditions {
if condition.Type == "project_points" {
@@ -12841,19 +12842,27 @@ func (a *App) calculateLockedSortValue(item WishlistItem, userID int) float64 {
// weeks > 0 && < 99999 означает, что условие еще не выполнено и расчет успешен
// weeks == 0 означает условие выполнено
// weeks == 99999 означает медиана отсутствует (нельзя рассчитать) или ошибка расчета
if weeks > 0 && weeks < 99999 {
if weeks == 0 {
// Условие выполнено - считаем как 0 недель
// Не обновляем maxWeeks, так как 0 < любого положительного значения
} else if weeks > 0 && weeks < 99999 {
// Условие не выполнено - учитываем в maxWeeks
allCompleted = false
if weeks > maxWeeks {
maxWeeks = weeks
}
} else {
// weeks == 99999 - нельзя рассчитать, считаем как невыполненное
allCompleted = false
}
}
}
}
}
// Если были условия по проектам, но все выполнены (maxWeeks = 0)
if hasProjectConditions && maxWeeks == 0.0 {
return 999999.0
// Если были условия по проектам и все выполнены, возвращаем 0 (закрытые испытания = 0 недель)
if hasProjectConditions && allCompleted {
return 0.0
}
// Если не было условий по проектам (только задачи или нет условий)