Упрощена логика переноса проекта
- Если проект с указанным именем не существует - просто переименовываем текущий проект - Если проект существует - переносим все данные (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
|
SELECT id FROM projects WHERE name = $1 AND deleted = FALSE
|
||||||
`, req.NewName).Scan(&targetProjectID)
|
`, req.NewName).Scan(&targetProjectID)
|
||||||
|
|
||||||
var finalProjectID int
|
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
// Проект не найден - создаем новый
|
// Проект не найден - просто переименовываем текущий проект
|
||||||
err = tx.QueryRow(`
|
_, err = tx.Exec(`
|
||||||
INSERT INTO projects (name, deleted)
|
UPDATE projects
|
||||||
VALUES ($1, FALSE)
|
SET name = $1
|
||||||
RETURNING id
|
WHERE id = $2
|
||||||
`, req.NewName).Scan(&finalProjectID)
|
`, req.NewName, req.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error creating new project: %v", err)
|
log.Printf("Error renaming project: %v", err)
|
||||||
sendErrorWithCORS(w, fmt.Sprintf("Error creating new project: %v", err), http.StatusInternalServerError)
|
sendErrorWithCORS(w, fmt.Sprintf("Error renaming project: %v", err), http.StatusInternalServerError)
|
||||||
return
|
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 {
|
} else if err != nil {
|
||||||
log.Printf("Error querying target project: %v", err)
|
log.Printf("Error querying target project: %v", err)
|
||||||
sendErrorWithCORS(w, fmt.Sprintf("Error querying target project: %v", err), http.StatusInternalServerError)
|
sendErrorWithCORS(w, fmt.Sprintf("Error querying target project: %v", err), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
} else {
|
|
||||||
// Проект найден - используем его ID
|
|
||||||
finalProjectID = targetProjectID
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проект найден - переносим данные в существующий проект
|
||||||
|
finalProjectID := targetProjectID
|
||||||
|
|
||||||
// Обновляем все nodes с project_id на целевой
|
// Обновляем все nodes с project_id на целевой
|
||||||
_, err = tx.Exec(`
|
_, err = tx.Exec(`
|
||||||
UPDATE nodes
|
UPDATE nodes
|
||||||
|
|||||||
Reference in New Issue
Block a user