diff --git a/server/rest.go b/server/rest.go index 3260c0cfa..50a741c8a 100644 --- a/server/rest.go +++ b/server/rest.go @@ -418,6 +418,26 @@ func (s *RestServer) CreateWebService() { Returns(http.StatusOK, "OK", []cache.Document{}). Writes([]cache.Document{})) + // Get top items + ws.Route(ws.GET("/top/{name}").To(s.getTopItem). + Doc("Get top items."). + Metadata(restfulspec.KeyOpenAPITags, []string{RecommendationAPITag}). + Param(ws.HeaderParameter("X-API-Key", "API key").DataType("string")). + Param(ws.PathParameter("name", "Name of the top item recommender.").DataType("string")). + Param(ws.QueryParameter("n", "Number of returned items").DataType("integer")). + Param(ws.QueryParameter("offset", "Offset of returned items").DataType("integer")). + Returns(http.StatusOK, "OK", []cache.Document{}). + Writes([]cache.Document{})) + ws.Route(ws.GET("/top/{name}/{category}").To(s.getTopItem). + Doc("Get top items in category."). + Metadata(restfulspec.KeyOpenAPITags, []string{RecommendationAPITag}). + Param(ws.HeaderParameter("X-API-Key", "API key").DataType("string")). + Param(ws.PathParameter("name", "Name of the top item recommender.").DataType("string")). + Param(ws.PathParameter("category", "Category of returned items.").DataType("string")). + Param(ws.QueryParameter("n", "Number of returned items").DataType("integer")). + Param(ws.QueryParameter("offset", "Offset of returned items").DataType("integer")). + Returns(http.StatusOK, "OK", []cache.Document{}). + Writes([]cache.Document{})) // Get popular items ws.Route(ws.GET("/popular").To(s.getPopular). Doc("Get popular items."). @@ -614,6 +634,13 @@ func (s *RestServer) searchDocuments(collection, subset, category string, isItem Ok(response, items) } +func (s *RestServer) getTopItem(request *restful.Request, response *restful.Response) { + name := request.PathParameter("name") + category := request.PathParameter("category") + log.ResponseLogger(response).Debug("get top items", zap.String("name", name), zap.String("category", category)) + s.searchDocuments(cache.TopItems, name, category, true, request, response) +} + func (s *RestServer) getPopular(request *restful.Request, response *restful.Response) { category := request.PathParameter("category") log.ResponseLogger(response).Debug("get category popular items in category", zap.String("category", category)) diff --git a/storage/cache/database.go b/storage/cache/database.go index c4dbc5dde..14a046afc 100644 --- a/storage/cache/database.go +++ b/storage/cache/database.go @@ -85,6 +85,8 @@ const ( // Categorized the latest items - latest_items/{category} LatestItems = "latest_items" + TopItems = "top_items" + // ItemCategories is the set of item categories. The format of key: // Global item categories - item_categories ItemCategories = "item_categories"