5.10.2: Исправлен сброс прогрессии в null
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m22s

This commit is contained in:
poignatov
2026-03-04 18:09:50 +03:00
parent 98427f5d0e
commit 9f3637113d
4 changed files with 41 additions and 15 deletions

View File

@@ -1 +1 @@
5.10.1 5.10.2

View File

@@ -434,9 +434,10 @@ type PostponeTaskRequest struct {
// ============================================ // ============================================
type SaveDraftRequest struct { type SaveDraftRequest struct {
ProgressionValue *float64 `json:"progression_value,omitempty"` ProgressionValue *float64 `json:"progression_value,omitempty"`
ChildrenTaskIDs *[]int `json:"children_task_ids,omitempty"` // только checked подзадачи, nil = не менять ClearProgressionValue *bool `json:"clear_progression_value,omitempty"` // true = сбросить прогрессию в null
AutoComplete *bool `json:"auto_complete,omitempty"` // nil = не менять ChildrenTaskIDs *[]int `json:"children_task_ids,omitempty"` // только checked подзадачи, nil = не менять
AutoComplete *bool `json:"auto_complete,omitempty"` // nil = не менять
} }
type TaskDraft struct { type TaskDraft struct {
@@ -9406,6 +9407,7 @@ func (a *App) saveTaskDraftHandler(w http.ResponseWriter, r *http.Request) {
err = tx.QueryRow("SELECT id FROM task_drafts WHERE task_id = $1", taskID).Scan(&draftID) err = tx.QueryRow("SELECT id FROM task_drafts WHERE task_id = $1", taskID).Scan(&draftID)
var progressionValue sql.NullFloat64 var progressionValue sql.NullFloat64
clearProgression := req.ClearProgressionValue != nil && *req.ClearProgressionValue
if req.ProgressionValue != nil { if req.ProgressionValue != nil {
progressionValue = sql.NullFloat64{Float64: *req.ProgressionValue, Valid: true} progressionValue = sql.NullFloat64{Float64: *req.ProgressionValue, Valid: true}
} }
@@ -9434,8 +9436,23 @@ func (a *App) saveTaskDraftHandler(w http.ResponseWriter, r *http.Request) {
} else { } else {
// Обновляем существующий драфт // Обновляем существующий драфт
// Обновляем только те поля, которые переданы // Обновляем только те поля, которые переданы
if req.ProgressionValue != nil || req.AutoComplete != nil { if req.ProgressionValue != nil || req.AutoComplete != nil || clearProgression {
if req.AutoComplete != nil { if clearProgression {
// Сбрасываем прогрессию в null
if req.AutoComplete != nil {
_, err = tx.Exec(`
UPDATE task_drafts
SET progression_value = NULL, auto_complete = $1, updated_at = NOW()
WHERE id = $2
`, *req.AutoComplete, draftID)
} else {
_, err = tx.Exec(`
UPDATE task_drafts
SET progression_value = NULL, updated_at = NOW()
WHERE id = $1
`, draftID)
}
} else if req.AutoComplete != nil {
// Обновляем оба поля // Обновляем оба поля
_, err = tx.Exec(` _, err = tx.Exec(`
UPDATE task_drafts UPDATE task_drafts
@@ -10055,6 +10072,7 @@ func (a *App) completeTaskAtEndOfDayHandler(w http.ResponseWriter, r *http.Reque
err = tx.QueryRow("SELECT id FROM task_drafts WHERE task_id = $1", taskID).Scan(&draftID) err = tx.QueryRow("SELECT id FROM task_drafts WHERE task_id = $1", taskID).Scan(&draftID)
var progressionValue sql.NullFloat64 var progressionValue sql.NullFloat64
clearProgression := req.ClearProgressionValue != nil && *req.ClearProgressionValue
if req.ProgressionValue != nil { if req.ProgressionValue != nil {
progressionValue = sql.NullFloat64{Float64: *req.ProgressionValue, Valid: true} progressionValue = sql.NullFloat64{Float64: *req.ProgressionValue, Valid: true}
} }
@@ -10078,11 +10096,19 @@ func (a *App) completeTaskAtEndOfDayHandler(w http.ResponseWriter, r *http.Reque
return return
} else { } else {
// Обновляем существующий драфт с auto_complete = true // Обновляем существующий драфт с auto_complete = true
_, err = tx.Exec(` if clearProgression {
UPDATE task_drafts _, err = tx.Exec(`
SET progression_value = $1, auto_complete = $2, updated_at = NOW() UPDATE task_drafts
WHERE id = $3 SET progression_value = NULL, auto_complete = $1, updated_at = NOW()
`, progressionValue, *req.AutoComplete, draftID) WHERE id = $2
`, *req.AutoComplete, draftID)
} else {
_, err = tx.Exec(`
UPDATE task_drafts
SET progression_value = $1, auto_complete = $2, updated_at = NOW()
WHERE id = $3
`, progressionValue, *req.AutoComplete, draftID)
}
if err != nil { if err != nil {
log.Printf("Error updating draft: %v", err) log.Printf("Error updating draft: %v", err)

View File

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

View File

@@ -477,7 +477,7 @@ function TaskDetail({ taskId, onClose, onRefresh, onTaskCompleted, onNavigate })
children_task_ids: Array.from(selectedSubtasks) children_task_ids: Array.from(selectedSubtasks)
} }
// Если есть прогрессия, отправляем значение (или null, если не введено) // Если есть прогрессия, отправляем значение (или сбрасываем, если не введено)
if (taskDetail.task.progression_base != null) { if (taskDetail.task.progression_base != null) {
if (progressionValue.trim()) { if (progressionValue.trim()) {
const parsedValue = parseFloat(progressionValue) const parsedValue = parseFloat(progressionValue)
@@ -486,8 +486,8 @@ function TaskDetail({ taskId, onClose, onRefresh, onTaskCompleted, onNavigate })
} }
payload.progression_value = parsedValue payload.progression_value = parsedValue
} else { } else {
// Если прогрессия не введена - отправляем null // Если прогрессия не введена - сбрасываем в null
payload.progression_value = null payload.clear_progression_value = true
} }
} else { } else {
// Если нет progression_base, но пользователь ввел значение - отправляем его // Если нет progression_base, но пользователь ввел значение - отправляем его