Исправлена сортировка желаний и версия 3.14.11
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 59s

This commit is contained in:
poignatov
2026-01-19 22:25:28 +03:00
parent be2ae80226
commit d390fa4825
3 changed files with 47 additions and 4 deletions

View File

@@ -12346,6 +12346,41 @@ func (a *App) getBoardCompletedHandler(w http.ResponseWriter, r *http.Request) {
}
// getWishlistItemsByBoard загружает желания конкретной доски
// calculateUnlockValue вычисляет значение для сортировки желаний
// Возвращает значение, где:
// - Отрицательные значения: unlocked элементы (ставим в начало)
// - Положительные значения: сумма оставшихся баллов для locked элементов (меньше = выше в списке)
func calculateUnlockValue(item WishlistItem) float64 {
// Если элемент уже unlocked, ставим его в начало (отрицательное значение)
if item.Unlocked {
return -1.0
}
// Суммируем оставшиеся баллы по всем условиям project_points
var totalRemaining float64 = 0.0
var hasProjectPointsConditions bool = false
for _, condition := range item.UnlockConditions {
if condition.Type == "project_points" {
hasProjectPointsConditions = true
if condition.CurrentPoints != nil && condition.RequiredPoints != nil {
remaining := *condition.RequiredPoints - *condition.CurrentPoints
if remaining > 0 {
totalRemaining += remaining
}
}
}
}
// Если есть условия project_points, возвращаем сумму оставшихся баллов
if hasProjectPointsConditions {
return totalRemaining
}
// Элементы без условий project_points ставим в конец (большое значение)
return 999999.0
}
func (a *App) getWishlistItemsByBoard(boardID int, userID int) ([]WishlistItem, error) {
query := `
SELECT
@@ -12521,9 +12556,17 @@ func (a *App) getWishlistItemsByBoard(boardID int, userID int) ([]WishlistItem,
items = append(items, *item)
}
// Сортируем по ID для стабильного порядка
// Сортируем: сначала unlocked, затем по сумме оставшихся баллов (от меньшего к большему)
sort.Slice(items, func(i, j int) bool {
return items[i].ID < items[j].ID
valueI := calculateUnlockValue(items[i])
valueJ := calculateUnlockValue(items[j])
// Если значения равны, сортируем по ID для стабильного порядка
if valueI == valueJ {
return items[i].ID < items[j].ID
}
return valueI < valueJ
})
return items, nil