MCPcopy Create free account
hub / github.com/Facets-cloud/flow / ResolveTaskOrProject

Function ResolveTaskOrProject

internal/app/resolve.go:138–169  ·  view source on GitHub ↗

ResolveTaskOrProject resolves a ref that could be either a task or project. Supports optional task/ or project/ prefix. Without prefix, tries both. Errors if the ref matches in both tables.

(db *sql.DB, ref string, includeArchived bool)

Source from the content-addressed store, hash-verified

136// Supports optional task/ or project/ prefix. Without prefix, tries both.
137// Errors if the ref matches in both tables.
138func ResolveTaskOrProject(db *sql.DB, ref string, includeArchived bool) (kind string, slug string, err error) {
139 if strings.HasPrefix(ref, "task/") {
140 t, err := ResolveTask(db, strings.TrimPrefix(ref, "task/"), includeArchived)
141 if err != nil {
142 return "", "", err
143 }
144 return "task", t.Slug, nil
145 }
146 if strings.HasPrefix(ref, "project/") {
147 p, err := ResolveProject(db, strings.TrimPrefix(ref, "project/"), includeArchived)
148 if err != nil {
149 return "", "", err
150 }
151 return "project", p.Slug, nil
152 }
153
154 t, tErr := ResolveTask(db, ref, includeArchived)
155 p, pErr := ResolveProject(db, ref, includeArchived)
156
157 switch {
158 case tErr == nil && pErr == nil:
159 return "", "", fmt.Errorf(
160 "ambiguous ref %q: matches task %q and project %q; use 'task/%s' or 'project/%s'",
161 ref, t.Slug, p.Slug, ref, ref)
162 case tErr == nil:
163 return "task", t.Slug, nil
164 case pErr == nil:
165 return "project", p.Slug, nil
166 default:
167 return "", "", fmt.Errorf("no task or project matching %q", ref)
168 }
169}

Callers

nothing calls this directly

Calls 2

ResolveTaskFunction · 0.85
ResolveProjectFunction · 0.85

Tested by

no test coverage detected