feat: filter approval records by status and decision source

This commit is contained in:
ji ruo committed 2026-09-16 17:24:15 +08:00
1 parent 80a085d157
commit a91c0a7223
8 files changed
+431 -47

No files matched your search

+29 -4
View File
@@ -248,7 +248,12 @@ func (s *Server) interceptListTaskItems(w http.ResponseWriter, r *http.Request)
return
}
q := r.URL.Query()
if q.Get("page") == "" && q.Get("size") == "" {
filter, err := interceptFilterParams(q)
if err != nil {
writeErr(w, 400, err.Error())
return
}
if q.Get("page") == "" && q.Get("size") == "" && filter == (db.InterceptApprovalFilter{}) {
items, err := pg.ListTaskIntercepts(taskID)
if err != nil {
writeErr(w, 500, err.Error())
@@ -261,7 +266,7 @@ func (s *Server) interceptListTaskItems(w http.ResponseWriter, r *http.Request)
return
}
page, size := interceptPageParams(q)
items, total, err := pg.ListTaskInterceptsPage(taskID, page, size)
items, total, err := pg.ListTaskInterceptsPage(taskID, page, size, filter)
if err != nil {
writeErr(w, 500, err.Error())
return
@@ -278,7 +283,12 @@ func (s *Server) interceptHistory(w http.ResponseWriter, r *http.Request) {
return
}
q := r.URL.Query()
if q.Get("page") == "" && q.Get("size") == "" {
filter, err := interceptFilterParams(q)
if err != nil {
writeErr(w, 400, err.Error())
return
}
if q.Get("page") == "" && q.Get("size") == "" && filter == (db.InterceptApprovalFilter{}) {
items, err := pg.ListAllIntercepts(200)
if err != nil {
writeErr(w, 500, err.Error())
@@ -291,7 +301,7 @@ func (s *Server) interceptHistory(w http.ResponseWriter, r *http.Request) {
return
}
page, size := interceptPageParams(q)
items, total, err := pg.ListAllInterceptsPage(page, size)
items, total, err := pg.ListAllInterceptsPage(page, size, filter)
if err != nil {
writeErr(w, 500, err.Error())
return
@@ -302,6 +312,21 @@ func (s *Server) interceptHistory(w http.ResponseWriter, r *http.Request) {
writeJSON(w, 200, map[string]any{"items": items, "total": total, "page": page, "page_size": size})
}
func interceptFilterParams(q url.Values) (db.InterceptApprovalFilter, error) {
filter := db.InterceptApprovalFilter{Status: q.Get("status"), DecisionSource: q.Get("decision_source")}
switch filter.Status {
case "", "pending", "allowed", "denied", "timeout":
default:
return filter, fmt.Errorf("status 必须是 pending、allowed、denied 或 timeout")
}
switch filter.DecisionSource {
case "", "model", "rule", "unknown":
default:
return filter, fmt.Errorf("decision_source 必须是 model、rule 或 unknown")
}
return filter, nil
}
func interceptPageParams(q url.Values) (int, int) {
page := atoiDefault(q.Get("page"), 1)
size := atoiDefault(q.Get("size"), 20)