Files
weichenandCursor 079225495e fix(workflowdef): heal retired seeds and fall back published_by
启动种子不再依赖固定用户 id=1,并把白名单工作流的 retired 状态恢复为 active。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-20 14:03:30 +00:00

73 lines
2.2 KiB
Go

package workflowdef
import "context"
// ListProjectSelectableDefinitions 返回项目可选的已发布正式工作流(医疗三 + 软件两白名单)。
func (s *Store) ListProjectSelectableDefinitions(ctx context.Context) ([]Definition, error) {
if !s.enabled() {
return nil, ErrNotAvailable
}
rows, err := s.pool.Query(ctx, `
SELECT id, def_key, name, description, status, latest_published_version, product_domain,
COALESCE(project_selectable, false), COALESCE(catalog_order, 0), created_at, updated_at
FROM workflow_definitions
WHERE def_key = ANY($1) AND latest_published_version > 0
ORDER BY COALESCE(catalog_order, 0) ASC, def_key ASC
`, OfficialWorkflowKeys())
if err != nil {
return nil, err
}
defer rows.Close()
out := make([]Definition, 0, len(OfficialWorkflowKeys()))
for rows.Next() {
var d Definition
if err := rows.Scan(&d.ID, &d.Key, &d.Name, &d.Description, &d.Status, &d.LatestPublishedVersion, &d.ProductDomain,
&d.ProjectSelectable, &d.CatalogOrder, &d.CreatedAt, &d.UpdatedAt); err != nil {
return nil, err
}
if !IsOfficialWorkflowKey(d.Key) {
continue
}
if !d.ProjectSelectable {
d.ProjectSelectable = true
}
if d.Name == "" || d.Name == d.Key {
d.Name = OfficialWorkflowName(d.Key)
}
out = append(out, d)
}
return out, rows.Err()
}
// RetireNonOfficialDefinitions 将非白名单正式定义标记为不可选。
func (s *Store) RetireNonOfficialDefinitions(ctx context.Context) error {
if !s.enabled() {
return ErrNotAvailable
}
_, err := s.pool.Exec(ctx, `
UPDATE workflow_definitions
SET project_selectable = false, status = 'retired', updated_at = now()
WHERE def_key <> ALL($1)
`, OfficialWorkflowKeys())
if err != nil {
return err
}
_, err = s.pool.Exec(ctx, `
UPDATE workflow_definitions
SET project_selectable = true,
status = 'active',
catalog_order = CASE def_key
WHEN 'main' THEN 10
WHEN 'product_manager' THEN 20
WHEN 'test_manager' THEN 30
WHEN 'rdev' THEN 40
WHEN 'software_bootstrap' THEN 50
WHEN 'software_delivery' THEN 60
ELSE catalog_order
END,
updated_at = now()
WHERE def_key = ANY($1)
`, OfficialWorkflowKeys())
return err
}