From 569499e54da28aa84459f4c4df3952f7d8563eb5 Mon Sep 17 00:00:00 2001 From: xuans Date: Wed, 30 Sep 2026 04:15:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5P0-10=E5=AE=A1=E6=9F=A5?= =?UTF-8?q?=E5=9F=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 保留幂等活动状态和域名删除保护的当前审查基线,后续继续修复并补充测试。 --- backend/internal/httpapi/task_api.go | 21 +++++++++++++++++-- .../repository/project_domain_repository.go | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/backend/internal/httpapi/task_api.go b/backend/internal/httpapi/task_api.go index b9b4e15..72b0109 100644 --- a/backend/internal/httpapi/task_api.go +++ b/backend/internal/httpapi/task_api.go @@ -74,7 +74,7 @@ func (s *Server) issueDomainAsTask(c *gin.Context) { } if existing, err := s.tasks.FindTaskByIdempotencyKey(c.Request.Context(), domainID, idempotencyKey); err == nil { status := http.StatusOK - if existing.Status == "queued" || existing.Status == "running" { + if isActiveTaskStatus(existing.Status) { status = http.StatusConflict } c.JSON(status, gin.H{"task": existing, "replayed": true}) @@ -106,7 +106,7 @@ func (s *Server) issueDomainAsTask(c *gin.Context) { if idempotencyKey != "" { if existing, lookupErr := s.tasks.FindTaskByIdempotencyKey(c.Request.Context(), domainID, idempotencyKey); lookupErr == nil { status := http.StatusOK - if existing.Status == "queued" || existing.Status == "running" { + if isActiveTaskStatus(existing.Status) { status = http.StatusConflict } c.JSON(status, gin.H{"task": existing, "replayed": true}) @@ -432,6 +432,23 @@ func validTaskIdempotencyKey(value string) bool { } return true } +func isActiveTaskStatus(status string) bool { + +switch status { + +case "queued", "running", "retry_wait", "cancelling": + + +return true + +default: + + +return false + +} +} + func (s *Server) listTasks(c *gin.Context) { reader, ok := s.projectTaskReader(c) if !ok { diff --git a/backend/internal/repository/project_domain_repository.go b/backend/internal/repository/project_domain_repository.go index 97b1114..1b42ebd 100644 --- a/backend/internal/repository/project_domain_repository.go +++ b/backend/internal/repository/project_domain_repository.go @@ -112,7 +112,7 @@ func (r *SQLProjectMemberRepository) DeleteProjectDomain(ctx context.Context, ac return err } rows, err := tx.QueryContext(ctx, Rebind(r.driver, `SELECT id FROM tasks - WHERE domain_id = ? AND task_type IN ('certificate_issue', 'certificate_validate', 'certificate_deploy', 'certificate_import', 'certificate_restore') + WHERE domain_id = ? AND task_type IN ('certificate_issue', 'certificate_validate', 'certificate_deploy', 'certificate_import', 'certificate_restore', 'renewal_run') AND status IN ('queued', 'running', 'retry_wait', 'cancelling')`+r.resourceWriteLock()), domainID) if err != nil { return fmt.Errorf("检查域名任务失败:%w", err)