diff --git a/modules/structs/repo.go b/modules/structs/repo.go index 30697feadd..7f09acf2dc 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -455,9 +455,10 @@ type DeleteOrgReposResponse struct { } // DeleteRepoFailure represents a repository that failed to delete +// swagger:model type DeleteRepoFailure struct { // Repository name RepoName string `json:"repo_name"` - // Reason for deletion failure - Reason string `json:"reason"` + // Message to be displayed + Message string `json:"reason"` } diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index 4147b2e0f2..0ccb8507af 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -13,6 +13,7 @@ import ( "code.gitea.io/gitea/models/perm" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/optional" repo_module "code.gitea.io/gitea/modules/repository" api "code.gitea.io/gitea/modules/structs" @@ -514,6 +515,8 @@ func DeleteOrgRepos(ctx *context.APIContext) { // "$ref": "#/responses/DeleteOrgReposList" // "403": // "$ref": "#/responses/forbidden" + // "404": + // "$ref": "#/responses/notFound" org := ctx.Org.Organization repos, err := repo_model.GetOrgRepositories(ctx, org.ID) if err != nil { @@ -526,21 +529,26 @@ func DeleteOrgRepos(ctx *context.APIContext) { } for _, repo := range repos { canDelete, err := repo_module.CanUserDelete(ctx, repo, ctx.Doer) - if !canDelete || err != nil { - reason := "Permission denied" - if err != nil { - reason = err.Error() - } + if !canDelete { response.Failed = append(response.Failed, api.DeleteRepoFailure{ RepoName: repo.Name, - Reason: reason, + Message: "Insufficient permissions to delete repository", + }) + continue + } + if err != nil { + log.Error("Error checking delete permission for repo %s: %v", repo.Name, err) + response.Failed = append(response.Failed, api.DeleteRepoFailure{ + RepoName: repo.Name, + Message: "Failed to verify delete permissions", }) continue } if err := repo_service.DeleteRepository(ctx, ctx.Doer, repo, true); err != nil { + log.Error("Error deleting repo %s: %v", repo.Name, err) response.Failed = append(response.Failed, api.DeleteRepoFailure{ RepoName: repo.Name, - Reason: err.Error(), + Message: "Failed to delete repository", }) } else { response.Deleted = append(response.Deleted, repo.Name) diff --git a/routers/api/v1/swagger/org.go b/routers/api/v1/swagger/org.go index f6cdbcab69..ef5b53d813 100644 --- a/routers/api/v1/swagger/org.go +++ b/routers/api/v1/swagger/org.go @@ -47,5 +47,5 @@ type swaggerResponseOrganizationPermissions struct { type swaggerDeleteOrgReposList struct { // List of successfully deleted repositories and failures //in:body - Body []api.DeleteOrgReposResponse `json:"body"` + Body api.DeleteOrgReposResponse `json:"body"` } diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index a9f559487d..6e3312be22 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -3663,6 +3663,9 @@ }, "403": { "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" } } } @@ -24247,9 +24250,9 @@ "type": "object", "properties": { "reason": { - "description": "Reason for deletion failure", + "description": "Message to be displayed", "type": "string", - "x-go-name": "Reason" + "x-go-name": "Message" }, "repo_name": { "description": "Repository name", @@ -29810,10 +29813,7 @@ "DeleteOrgReposList": { "description": "DeleteOrgReposList", "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/DeleteOrgReposResponse" - } + "$ref": "#/definitions/DeleteOrgReposResponse" } }, "DeployKey": {