Replace per-creator name uniqueness with a global index among non-retired projects, and reject cross-user duplicate creates with 409. Co-authored-by: Cursor <cursoragent@cursor.com>
33 lines
1.5 KiB
Go
33 lines
1.5 KiB
Go
package projectworkflow
|
|
|
|
import "errors"
|
|
|
|
var (
|
|
// ErrUnauthenticated 未提供认证 Token 或会话已失效
|
|
ErrUnauthenticated = errors.New("unauthenticated: valid authentication token required")
|
|
|
|
// ErrForbiddenNotCreator 仅项目创建人有权切换工作流或配置
|
|
ErrForbiddenNotCreator = errors.New("forbidden: only project creator can switch active workflow")
|
|
|
|
// ErrProjectNotFound 指定项目不存在或无权访问
|
|
ErrProjectNotFound = errors.New("project not found")
|
|
|
|
// ErrWorkflowNotFound 工作流未定义或未在当前项目启用
|
|
ErrWorkflowNotFound = errors.New("workflow definition not found or disabled for project")
|
|
|
|
// ErrConcurrentConflict 乐观锁版本冲突 (workflow_selection_version 不匹配)
|
|
ErrConcurrentConflict = errors.New("conflict: workflow selection version mismatch")
|
|
|
|
// ErrPrerequisiteNotMet 前置条件未满足 (例如缺少已批准的上游需求规格书)
|
|
ErrPrerequisiteNotMet = errors.New("precondition failed: prerequisite upstream document not satisfied")
|
|
|
|
// ErrInvalidInput 输入参数不合法
|
|
ErrInvalidInput = errors.New("invalid parameter: required field missing or malformed")
|
|
|
|
// ErrDuplicateProjectName 全局已存在同名活跃项目
|
|
ErrDuplicateProjectName = errors.New("duplicate project name")
|
|
|
|
// ErrLegacySwitchBlocked 已启用实例化工作流治理,禁止旧式即时切换
|
|
ErrLegacySwitchBlocked = errors.New("legacy workflow switch blocked: use project settings activation flow")
|
|
)
|