Skip to content

Commit

Permalink
[WIP] Introduce a basic search API
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti committed Jan 7, 2025
1 parent 3eb6a43 commit 38d4d49
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ noa_add_default_options(PRIVATE schema_registry_server)
set_target_properties(schema_registry_server PROPERTIES OUTPUT_NAME sourcemeta-registry-server)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::jsontoolkit::uri)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::jsontoolkit::json)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::jsontoolkit::jsonl)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::jsontoolkit::jsonschema)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::hydra::http)
target_link_libraries(schema_registry_server PRIVATE sourcemeta::hydra::httpserver)
Expand Down
36 changes: 35 additions & 1 deletion src/server/server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <sourcemeta/hydra/httpserver.h>

#include <sourcemeta/jsontoolkit/json.h>
#include <sourcemeta/jsontoolkit/jsonl.h>
#include <sourcemeta/jsontoolkit/jsonschema.h>
#include <sourcemeta/jsontoolkit/uri.h>

Expand All @@ -17,7 +18,7 @@
#include <memory> // std::unique_ptr
#include <optional> // std::optional, std::nullopt
#include <sstream> // std::ostringstream
#include <string> // std::string
#include <string> // std::string, std::getline
#include <string_view> // std::string_view
#include <utility> // std::move

Expand Down Expand Up @@ -106,6 +107,38 @@ auto on_index(const sourcemeta::hydra::http::ServerLogger &,
sourcemeta::hydra::http::serve_file(
*(__global_data) / "generated" / "index.html", request, response);
}

auto on_search(const sourcemeta::hydra::http::ServerLogger &logger,
const sourcemeta::hydra::http::ServerRequest &request,
sourcemeta::hydra::http::ServerResponse &response) -> void {
const auto query{request.query("q")};
if (!query.has_value()) {
json_error(logger, request, response,
sourcemeta::hydra::http::Status::BAD_REQUEST, "missing-query",
"You must provide a query parameter to search for");
return;
}

auto stream = sourcemeta::jsontoolkit::read_file(
*(__global_data) / "generated" / "search.jsonl");
std::string line;
while (std::getline(stream, line)) {
std::cerr << line << "\n";
if (stream.bad()) {
std::cerr << "BAD\n";
}
if (stream.fail()) {
std::cerr << "FAIL\n";
}
if (stream.eof()) {
std::cerr << "EOF\n";
}
}

std::cerr << "XXXX: " << query.value() << "\n";
response.status(sourcemeta::hydra::http::Status::OK);
response.end();
}
#endif

static auto on_request(const sourcemeta::hydra::http::ServerLogger &logger,
Expand Down Expand Up @@ -250,6 +283,7 @@ auto main(int argc, char *argv[]) noexcept -> int {
sourcemeta::hydra::http::Server server;
#ifdef SOURCEMETA_REGISTRY_ENTERPRISE
server.route(sourcemeta::hydra::http::Method::GET, "/", on_index);
server.route(sourcemeta::hydra::http::Method::GET, "/search", on_search);
#endif
server.route(sourcemeta::hydra::http::Method::GET, "/*", on_request);
server.route(sourcemeta::hydra::http::Method::HEAD, "/*", on_request);
Expand Down
10 changes: 10 additions & 0 deletions test/e2e/ce/search.hurl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
GET {{base}}/search?q=foo
HTTP 404
Content-Type: application/json
[Captures]
current_request_id: header "X-Request-id"
[Asserts]
jsonpath "$.code" == 404
jsonpath "$.error" == "not-found"
jsonpath "$.message" == "There is no schema at this URL"
jsonpath "$.request" == "{{current_request_id}}"

0 comments on commit 38d4d49

Please sign in to comment.