You've already forked agentic-coding-workflow
feat(workspace): migration 0003 + errs codes for workspace/worktree/git
This commit is contained in:
@@ -32,6 +32,18 @@ const (
|
||||
CodeProjectSlugTaken Code = "project_slug_taken"
|
||||
CodeProjectArchived Code = "project_archived"
|
||||
CodeRequirementClosed Code = "requirement_closed"
|
||||
|
||||
// Workspace 模块细粒度 code
|
||||
CodeWorkspaceSlugTaken Code = "workspace_slug_taken"
|
||||
CodeWorkspaceCloneFailed Code = "workspace_clone_failed"
|
||||
CodeWorkspaceSyncInProgress Code = "workspace_sync_in_progress"
|
||||
CodeWorkspaceRemoteInvalid Code = "workspace_remote_invalid"
|
||||
CodeWorktreeBranchConflict Code = "worktree_branch_conflict"
|
||||
CodeWorktreeAlreadyActive Code = "worktree_already_active"
|
||||
CodeWorktreeNotHeldByCaller Code = "worktree_not_held_by_caller"
|
||||
CodeWorktreePathInvalid Code = "worktree_path_invalid"
|
||||
CodeGitCredentialInvalid Code = "git_credential_invalid"
|
||||
CodeGitCmdFailed Code = "git_cmd_failed"
|
||||
)
|
||||
|
||||
// AppError is the application's structured error type. It carries a stable
|
||||
@@ -103,7 +115,9 @@ func HTTPStatus(code Code) int {
|
||||
case CodeNotFound:
|
||||
return http.StatusNotFound
|
||||
case CodeConflict,
|
||||
CodeProjectSlugTaken, CodeProjectArchived, CodeRequirementClosed:
|
||||
CodeProjectSlugTaken, CodeProjectArchived, CodeRequirementClosed,
|
||||
CodeWorkspaceSlugTaken, CodeWorkspaceSyncInProgress,
|
||||
CodeWorktreeBranchConflict, CodeWorktreeAlreadyActive:
|
||||
return http.StatusConflict
|
||||
case CodeRateLimited:
|
||||
return http.StatusTooManyRequests
|
||||
@@ -111,6 +125,12 @@ func HTTPStatus(code Code) int {
|
||||
return http.StatusBadGateway
|
||||
case CodeUnavailable:
|
||||
return http.StatusServiceUnavailable
|
||||
case CodeWorkspaceCloneFailed, CodeGitCmdFailed:
|
||||
return http.StatusBadGateway
|
||||
case CodeWorkspaceRemoteInvalid, CodeWorktreePathInvalid, CodeGitCredentialInvalid:
|
||||
return http.StatusBadRequest
|
||||
case CodeWorktreeNotHeldByCaller:
|
||||
return http.StatusForbidden
|
||||
default:
|
||||
return http.StatusInternalServerError
|
||||
}
|
||||
|
||||
@@ -29,18 +29,28 @@ func TestWrap_PreservesCause(t *testing.T) {
|
||||
|
||||
func TestHTTPStatus(t *testing.T) {
|
||||
cases := map[Code]int{
|
||||
CodeInvalidInput: http.StatusBadRequest,
|
||||
CodeUnauthorized: http.StatusUnauthorized,
|
||||
CodeForbidden: http.StatusForbidden,
|
||||
CodeNotFound: http.StatusNotFound,
|
||||
CodeConflict: http.StatusConflict,
|
||||
CodeProjectSlugTaken: http.StatusConflict,
|
||||
CodeProjectArchived: http.StatusConflict,
|
||||
CodeRequirementClosed: http.StatusConflict,
|
||||
CodeRateLimited: http.StatusTooManyRequests,
|
||||
CodeUpstream: http.StatusBadGateway,
|
||||
CodeUnavailable: http.StatusServiceUnavailable,
|
||||
CodeInternal: http.StatusInternalServerError,
|
||||
CodeInvalidInput: http.StatusBadRequest,
|
||||
CodeUnauthorized: http.StatusUnauthorized,
|
||||
CodeForbidden: http.StatusForbidden,
|
||||
CodeNotFound: http.StatusNotFound,
|
||||
CodeConflict: http.StatusConflict,
|
||||
CodeProjectSlugTaken: http.StatusConflict,
|
||||
CodeProjectArchived: http.StatusConflict,
|
||||
CodeRequirementClosed: http.StatusConflict,
|
||||
CodeRateLimited: http.StatusTooManyRequests,
|
||||
CodeUpstream: http.StatusBadGateway,
|
||||
CodeUnavailable: http.StatusServiceUnavailable,
|
||||
CodeInternal: http.StatusInternalServerError,
|
||||
CodeWorkspaceSlugTaken: http.StatusConflict,
|
||||
CodeWorkspaceSyncInProgress: http.StatusConflict,
|
||||
CodeWorktreeBranchConflict: http.StatusConflict,
|
||||
CodeWorktreeAlreadyActive: http.StatusConflict,
|
||||
CodeWorkspaceCloneFailed: http.StatusBadGateway,
|
||||
CodeGitCmdFailed: http.StatusBadGateway,
|
||||
CodeWorkspaceRemoteInvalid: http.StatusBadRequest,
|
||||
CodeWorktreePathInvalid: http.StatusBadRequest,
|
||||
CodeGitCredentialInvalid: http.StatusBadRequest,
|
||||
CodeWorktreeNotHeldByCaller: http.StatusForbidden,
|
||||
}
|
||||
for code, want := range cases {
|
||||
require.Equal(t, want, HTTPStatus(code), "code=%s", code)
|
||||
|
||||
Reference in New Issue
Block a user