启动种子不再依赖固定用户 id=1,并把白名单工作流的 retired 状态恢复为 active。 Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
2.2 KiB
Go
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
|
|
}
|