Исправлена сортировка желаний и версия 3.14.11
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 59s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 59s
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "play-life-web",
|
||||
"version": "3.14.10",
|
||||
"version": "3.14.11",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
Reference in New Issue
Block a user