DistroqueryAPI: getRepositoryPackages: added support for query string
This commit is contained in:
parent
f1fd8ef275
commit
e7e06284da
@ -104,7 +104,7 @@ json DistroqueryAPI::getPackageSourceDetailsById(configTag* ct, long id) {
|
||||
return j;
|
||||
}
|
||||
|
||||
json DistroqueryAPI::getRepositoryPackages(string repository, int per_page, int page) {
|
||||
json DistroqueryAPI::getRepositoryPackages(string repository, int per_page, int page, string query) {
|
||||
json j;
|
||||
string sql;
|
||||
sqlite3_stmt *stmt;
|
||||
@ -113,6 +113,7 @@ json DistroqueryAPI::getRepositoryPackages(string repository, int per_page, int
|
||||
j["query"]["repository"] = repository;
|
||||
j["query"]["per_page"] = per_page;
|
||||
j["query"]["page"] = page;
|
||||
j["query"]["q"] = query;
|
||||
|
||||
if (per_page < 1) {
|
||||
j["error"] = "'per_page' query var must be >= 1";
|
||||
@ -136,7 +137,13 @@ json DistroqueryAPI::getRepositoryPackages(string repository, int per_page, int
|
||||
return j;
|
||||
}
|
||||
|
||||
sql = "SELECT COUNT(*) OVER() AS total_count,* FROM sources ORDER BY name COLLATE NOCASE ASC"
|
||||
string query_append;
|
||||
if (query != "")
|
||||
query_append = "WHERE name LIKE '%" + query + "%' OR summary LIKE '%" + query +
|
||||
"%' OR description LIKE '%" + query + "%'";
|
||||
|
||||
sql = "SELECT COUNT(*) OVER() AS total_count,* FROM sources " + query_append +
|
||||
" ORDER BY name COLLATE NOCASE ASC"
|
||||
" LIMIT " + to_string(per_page) +
|
||||
" OFFSET " + to_string(per_page * (page -1));
|
||||
if (sqlite3_prepare_v2(db, sql.c_str(), sql.length(), &stmt, NULL) == SQLITE_OK) {
|
||||
@ -442,6 +449,7 @@ void DistroqueryAPI::getApiResponse(string path_info) {
|
||||
// Pagination
|
||||
unsigned int per_page = 100;
|
||||
unsigned int page = 1;
|
||||
string query;
|
||||
if (query_vars.find("per_page") != query_vars.end()) {
|
||||
try {
|
||||
per_page = atoi(query_vars["per_page"].c_str());
|
||||
@ -456,7 +464,10 @@ void DistroqueryAPI::getApiResponse(string path_info) {
|
||||
cerr << "Error converting '" << query_vars["page"] << " to int: " << e.what() << endl;
|
||||
}
|
||||
}
|
||||
auto packages = getRepositoryPackages(path_split[1], per_page, page);
|
||||
if (query_vars.find("q") != query_vars.end()) {
|
||||
query = urlDecode(query_vars["q"]);
|
||||
}
|
||||
auto packages = getRepositoryPackages(path_split[1], per_page, page, query);
|
||||
cout << packages.dump();
|
||||
} else if (path_split[0] == "package") {
|
||||
// API service: package
|
||||
|
@ -41,7 +41,7 @@ class DistroqueryAPI {
|
||||
configTag *config;
|
||||
json configToJsonRepositories();
|
||||
void sendErrorResponse(string message);
|
||||
json getRepositoryPackages(string repository, int per_page, int page);
|
||||
json getRepositoryPackages(string repository, int per_page, int page, string query);
|
||||
json getPackageSourceDetailsById(configTag* ct, long id);
|
||||
json getPackageSourceDetails(string repository, string package);
|
||||
json getBuiltPackagesFromSourceID(configTag* ct, long id);
|
||||
|
Loading…
Reference in New Issue
Block a user