feat: add precise task business key and creation time queries

This commit is contained in:
2026-09-17 22:19:36 +08:00
parent a50d5faac7
commit 7641423f9d
32 changed files with 1105 additions and 93 deletions

View File

@@ -60,7 +60,7 @@ func registerTasks(mux *http.ServeMux, s *service.Service) {
return nil, 0, fault.Invalid("invalid query encoding")
}
for k, v := range q {
if len(v) != 1 || (k != "queue_id" && k != "state" && k != "limit" && k != "cursor") {
if len(v) != 1 || (k != "queue_id" && k != "state" && k != "limit" && k != "cursor" && k != "business_key" && k != "created_from" && k != "created_before") {
return nil, 0, fault.Invalid("invalid query parameter")
}
}
@@ -72,7 +72,20 @@ func registerTasks(mux *http.ServeMux, s *service.Service) {
return nil, 0, fault.Invalid("invalid limit")
}
}
out, err := s.ListTasks(r.Context(), t, service.ListInput{QueueID: core.ID(q.Get("queue_id")), State: pulse.TaskState(q.Get("state")), Limit: limit, Cursor: q.Get("cursor")})
in := service.ListInput{QueueID: core.ID(q.Get("queue_id")), State: pulse.TaskState(q.Get("state")), Limit: limit, Cursor: q.Get("cursor"), BusinessKey: q.Get("business_key")}
if q.Has("business_key") && in.BusinessKey == "" {
return nil, 0, fault.Invalid("business_key filter must not be empty")
}
for name, field := range map[string]**time.Time{"created_from": &in.CreatedFrom, "created_before": &in.CreatedBefore} {
if q.Has(name) {
v, err := time.Parse(time.RFC3339Nano, q.Get(name))
if err != nil {
return nil, 0, fault.Invalid("invalid creation time bound")
}
*field = &v
}
}
out, err := s.ListTasks(r.Context(), t, in)
return out, 200, err
}))
mux.HandleFunc("POST /v1/tasks/{command}", wrap(func(r *http.Request, t auth.Token) (any, int, error) {