// Path: Backend/internal/httpx/api_project_errors.go package httpx import ( "errors" "net/http" bootstrapservice "moku-backend/internal/bootstrap" ) func (routes apiRoutes) writeProjectFolderError(w http.ResponseWriter, r *http.Request, err error, operation string) { switch { case errors.Is(err, bootstrapservice.ErrProjectNotFound), errors.Is(err, bootstrapservice.ErrProjectFolderNotFound): WriteError(w, http.StatusNotFound, RequestIDFromContext(r.Context()), "not_found", err.Error()) case errors.Is(err, bootstrapservice.ErrInvalidProjectFolderMove): WriteError(w, http.StatusBadRequest, RequestIDFromContext(r.Context()), "invalid_request", err.Error()) default: routes.cfg.Logger.Error(operation+" project folder", "error", err, "path", r.URL.Path) message := "Failed to " + operation + " project folder." if routes.cfg.Config.IsDevelopment() { message = message + " " + err.Error() } WriteError(w, http.StatusInternalServerError, RequestIDFromContext(r.Context()), "project_folder_"+operation+"_failed", message) } } func (routes apiRoutes) writeProjectTreeError(w http.ResponseWriter, r *http.Request, err error, operation string) { switch { case errors.Is(err, bootstrapservice.ErrProjectNotFound), errors.Is(err, bootstrapservice.ErrProjectFolderNotFound), errors.Is(err, bootstrapservice.ErrProjectItemNotFound): WriteError(w, http.StatusNotFound, RequestIDFromContext(r.Context()), "not_found", err.Error()) case errors.Is(err, bootstrapservice.ErrInvalidProjectFolderMove), errors.Is(err, bootstrapservice.ErrInvalidProjectItemMove): WriteError(w, http.StatusBadRequest, RequestIDFromContext(r.Context()), "invalid_request", err.Error()) default: routes.cfg.Logger.Error(operation+" project tree", "error", err, "path", r.URL.Path) message := "Failed to " + operation + " project tree." if routes.cfg.Config.IsDevelopment() { message = message + " " + err.Error() } WriteError(w, http.StatusInternalServerError, RequestIDFromContext(r.Context()), "project_tree_"+operation+"_failed", message) } }