Упрощена логика переноса проекта

- Если проект с указанным именем не существует - просто переименовываем текущий проект
- Если проект существует - переносим все данные (nodes, weekly_goals) в существующий проект
- При удалении проекта удаляются все связанные weekly_goals
This commit is contained in:
poignatov
2025-12-29 21:38:43 +03:00
parent fc83bed1a3
commit 3b94ed2991

View File

@@ -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