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

@@ -1 +1 @@
4.8.5 4.8.6

View File

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

View File

@@ -1,6 +1,6 @@
{ {
"name": "play-life-web", "name": "play-life-web",
"version": "4.8.5", "version": "4.8.6",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",