Упрощена логика переноса проекта
- Если проект с указанным именем не существует - просто переименовываем текущий проект - Если проект существует - переносим все данные (nodes, weekly_goals) в существующий проект - При удалении проекта удаляются все связанные weekly_goals
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user