From 3b94ed2991f32d249917bffa2c78653c15e9060a Mon Sep 17 00:00:00 2001 From: poignatov Date: Mon, 29 Dec 2025 21:38:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Если проект с указанным именем не существует - просто переименовываем текущий проект - Если проект существует - переносим все данные (nodes, weekly_goals) в существующий проект - При удалении проекта удаляются все связанные weekly_goals --- play-life-backend/main.go | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/play-life-backend/main.go b/play-life-backend/main.go index c803598..c3c05b7 100644 --- a/play-life-backend/main.go +++ b/play-life-backend/main.go @@ -3515,28 +3515,41 @@ func (a *App) moveProjectHandler(w http.ResponseWriter, r *http.Request) { SELECT id FROM projects WHERE name = $1 AND deleted = FALSE `, req.NewName).Scan(&targetProjectID) - var finalProjectID int if err == sql.ErrNoRows { - // Проект не найден - создаем новый - err = tx.QueryRow(` - INSERT INTO projects (name, deleted) - VALUES ($1, FALSE) - RETURNING id - `, req.NewName).Scan(&finalProjectID) + // Проект не найден - просто переименовываем текущий проект + _, err = tx.Exec(` + UPDATE projects + SET name = $1 + WHERE id = $2 + `, req.NewName, req.ID) if err != nil { - log.Printf("Error creating new project: %v", err) - sendErrorWithCORS(w, fmt.Sprintf("Error creating new project: %v", err), http.StatusInternalServerError) + log.Printf("Error renaming project: %v", err) + sendErrorWithCORS(w, fmt.Sprintf("Error renaming project: %v", err), http.StatusInternalServerError) return } + + // Коммитим транзакцию + if err := tx.Commit(); err != nil { + log.Printf("Error committing transaction: %v", err) + sendErrorWithCORS(w, fmt.Sprintf("Error committing transaction: %v", err), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]interface{}{ + "message": "Project renamed successfully", + "project_id": req.ID, + }) + return } else if err != nil { log.Printf("Error querying target project: %v", err) sendErrorWithCORS(w, fmt.Sprintf("Error querying target project: %v", err), http.StatusInternalServerError) return - } else { - // Проект найден - используем его ID - finalProjectID = targetProjectID } + // Проект найден - переносим данные в существующий проект + finalProjectID := targetProjectID + // Обновляем все nodes с project_id на целевой _, err = tx.Exec(` UPDATE nodes