Исправление сохранения reward_policy для задач-желаний
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m7s

This commit is contained in:
poignatov
2026-01-21 18:57:47 +03:00
parent 068794a98c
commit d0d1cbd8cb
4 changed files with 13 additions and 5 deletions

View File

@@ -1 +1 @@
3.25.1 3.25.2

View File

@@ -7195,6 +7195,9 @@ func (a *App) getTaskDetailHandler(w http.ResponseWriter, r *http.Request) {
configIDInt := int(configID.Int64) configIDInt := int(configID.Int64)
task.ConfigID = &configIDInt task.ConfigID = &configIDInt
} }
if rewardPolicy.Valid {
task.RewardPolicy = &rewardPolicy.String
}
// Получаем награды основной задачи // Получаем награды основной задачи
rewards := make([]Reward, 0) rewards := make([]Reward, 0)
@@ -7932,16 +7935,19 @@ func (a *App) updateTaskHandler(w http.ResponseWriter, r *http.Request) {
// Подготовка reward_policy: если задача связана с желанием и политика не указана, используем "personal" по умолчанию // Подготовка reward_policy: если задача связана с желанием и политика не указана, используем "personal" по умолчанию
var rewardPolicyValue interface{} var rewardPolicyValue interface{}
if newWishlistID != nil { if newWishlistID != nil {
// Если reward_policy явно указан в запросе, используем его
if req.RewardPolicy != nil && (*req.RewardPolicy == "personal" || *req.RewardPolicy == "general") { if req.RewardPolicy != nil && (*req.RewardPolicy == "personal" || *req.RewardPolicy == "general") {
rewardPolicyValue = *req.RewardPolicy rewardPolicyValue = *req.RewardPolicy
} else { } else if req.RewardPolicy == nil {
// Если задача уже была привязана, сохраняем текущую политику, иначе используем "personal" // Если reward_policy не указан в запросе (undefined), сохраняем текущее значение из БД
// Это важно для случаев, когда обновляются другие поля, но reward_policy не должен меняться
var currentRewardPolicy sql.NullString var currentRewardPolicy sql.NullString
err = a.DB.QueryRow("SELECT reward_policy FROM tasks WHERE id = $1", taskID).Scan(&currentRewardPolicy) err = a.DB.QueryRow("SELECT reward_policy FROM tasks WHERE id = $1", taskID).Scan(&currentRewardPolicy)
if err == nil && currentRewardPolicy.Valid { if err == nil && currentRewardPolicy.Valid {
rewardPolicyValue = currentRewardPolicy.String rewardPolicyValue = currentRewardPolicy.String
} else { } else {
rewardPolicyValue = "personal" // Значение по умолчанию для задач, связанных с желаниями // Если в БД нет значения, используем "personal" по умолчанию
rewardPolicyValue = "personal"
} }
} }
} else { } else {

View File

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

View File

@@ -646,6 +646,8 @@ function TaskForm({ onNavigate, taskId, wishlistId, isTest: isTestFromProps = fa
wishlist_id: taskId wishlist_id: taskId
? currentWishlistId // При редактировании сохраняем текущую привязку к желанию ? currentWishlistId // При редактировании сохраняем текущую привязку к желанию
: (currentWishlistId || undefined), : (currentWishlistId || undefined),
// Отправляем reward_policy если задача связана с желанием
// Проверяем currentWishlistId или wishlistInfo, так как currentWishlistId устанавливается при загрузке задачи
reward_policy: (wishlistInfo || currentWishlistId) ? rewardPolicy : undefined, reward_policy: (wishlistInfo || currentWishlistId) ? rewardPolicy : undefined,
rewards: rewards.map(r => ({ rewards: rewards.map(r => ({
position: r.position, position: r.position,