MCPcopy Create free account
hub / github.com/GoogleChrome/webstatus.dev / ListFeatures

Method ListFeatures

backend/pkg/httpserver/list_features.go:31–119  ·  view source on GitHub ↗

ListFeatures implements backend.StrictServerInterface. nolint:ireturn // Expected ireturn for openapi generation.

(
	ctx context.Context,
	req backend.ListFeaturesRequestObject,
)

Source from the content-addressed store, hash-verified

29// ListFeatures implements backend.StrictServerInterface.
30// nolint:ireturn // Expected ireturn for openapi generation.
31func (s *Server) ListFeatures(
32 ctx context.Context,
33 req backend.ListFeaturesRequestObject,
34) (backend.ListFeaturesResponseObject, error) {
35 var cachedResponse backend.ListFeatures200JSONResponse
36 found := s.operationResponseCaches.listFeaturesCache.Lookup(ctx, req, &cachedResponse)
37 if found {
38 return cachedResponse, nil
39 }
40
41 var node *searchtypes.SearchNode
42 if req.Params.Q != nil {
43 // Try to decode the url.
44 decodedStr, err := url.QueryUnescape(*req.Params.Q)
45 if err != nil {
46 slog.WarnContext(ctx, "unable to decode string", "input string", *req.Params.Q, "error", err)
47
48 return backend.ListFeatures400JSONResponse{
49 Code: http.StatusBadRequest,
50 Message: "query string cannot be decoded",
51 }, nil
52 }
53
54 parser := searchtypes.FeaturesSearchQueryParser{}
55 node, err = parser.Parse(decodedStr)
56 if err != nil {
57 slog.WarnContext(ctx, "unable to parse query string", "query", decodedStr, "error", err)
58
59 return backend.ListFeatures400JSONResponse{
60 Code: http.StatusBadRequest,
61 Message: "query string does not match expected grammar",
62 }, nil
63 }
64 }
65 featurePage, err := s.wptMetricsStorer.FeaturesSearch(
66 ctx,
67 req.Params.PageToken,
68 getPageSizeOrDefault(req.Params.PageSize),
69 node,
70 req.Params.Sort,
71 getWPTMetricViewOrDefault(req.Params.WptMetricView),
72 backendtypes.DefaultBrowsers(),
73 )
74
75 if err != nil {
76 if errors.Is(err, backendtypes.ErrInvalidPageToken) {
77 slog.WarnContext(ctx, errMsgInvalidPageToken, "token", req.Params.PageToken, "error", err)
78
79 return backend.ListFeatures400JSONResponse{
80 Code: 400,
81 Message: errMsgInvalidPageToken,
82 }, nil
83 }
84
85 if errors.Is(err, backendtypes.ErrSavedSearchNotFound) ||
86 errors.Is(err, backendtypes.ErrHotlistNotFound) ||
87 errors.Is(err, backendtypes.ErrSavedSearchCycleDetected) ||
88 errors.Is(err, backendtypes.ErrSavedSearchMaxDepthExceeded) ||

Callers

nothing calls this directly

Calls 8

ParseMethod · 0.95
getPageSizeOrDefaultFunction · 0.85
sanitizeValidationErrorFunction · 0.85
LookupMethod · 0.80
AttemptCacheMethod · 0.80
FeaturesSearchMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected