Adding filters on retrieving users/subscribers.

This commit is contained in:
stephb9959
2022-04-22 12:12:05 -07:00
parent 006ca731f0
commit 4bb41f022a
4 changed files with 48 additions and 4 deletions

2
build
View File

@@ -1 +1 @@
39
40

View File

@@ -923,6 +923,16 @@ paths:
type: string
example: id1,id2,id3,id4,id5
required: false
- in: query
description: Name matching
name: nameSearch
schema:
type: string
- in: query
description: Name matching
name: emailSearch
schema:
type: string
responses:
200:
$ref: '#/components/schemas/UserList'
@@ -969,6 +979,16 @@ paths:
type: string
example: id1,id2,id3,id4,id5
required: false
- in: query
description: Name matching
name: nameSearch
schema:
type: string
- in: query
description: Name matching
name: emailSearch
schema:
type: string
responses:
200:
$ref: '#/components/schemas/UserList'

View File

@@ -13,11 +13,23 @@ namespace OpenWifi {
std::vector<SecurityObjects::UserInfo> Users;
bool IdOnly = (GetParameter("idOnly","false")=="true");
auto operatorId = GetParameter("operatorId");
auto nameSearch = GetParameter("nameSearch");
auto emailSearch = GetParameter("emailSearch");
std::string baseQuery;
if(!nameSearch.empty() || !emailSearch.empty()) {
if(!nameSearch.empty())
baseQuery = fmt::format(" Lower(name) like('%{}%' ", Poco::toLower(nameSearch) );
if(!emailSearch.empty())
baseQuery += baseQuery.empty() ? fmt::format(" Lower(email) like('%{}%' ", Poco::toLower(emailSearch))
: fmt::format(" and Lower(email) like('%{}%' ", Poco::toLower(emailSearch));
}
if(QB_.CountOnly) {
std::string whereClause;
if(!operatorId.empty()) {
whereClause = fmt::format(" owner='{}' ", operatorId);
whereClause = baseQuery.empty() ? fmt::format(" owner='{}' ", operatorId) :
fmt::format(" owner='{}' and {} ", operatorId, baseQuery);
auto count = StorageService()->SubDB().Count(whereClause);
return ReturnCountOnly(count);
}
@@ -28,7 +40,8 @@ namespace OpenWifi {
Poco::JSON::Object Answer;
std::string whereClause;
if(!operatorId.empty()) {
whereClause = fmt::format(" owner='{}' ", operatorId);
whereClause = baseQuery.empty() ? fmt::format(" owner='{}' ", operatorId) :
fmt::format(" owner='{}' and {} ", operatorId, baseQuery);
}
if (StorageService()->SubDB().GetUsers(QB_.Offset, QB_.Limit, Users, whereClause)) {
for (auto &i : Users) {

View File

@@ -11,11 +11,22 @@ namespace OpenWifi {
void RESTAPI_users_handler::DoGet() {
std::vector<SecurityObjects::UserInfo> Users;
bool IdOnly = (GetParameter("idOnly","false")=="true");
auto nameSearch = GetParameter("nameSearch");
auto emailSearch = GetParameter("emailSearch");
std::string baseQuery;
if(!nameSearch.empty() || !emailSearch.empty()) {
if(!nameSearch.empty())
baseQuery = fmt::format(" Lower(name) like('%{}%' ", Poco::toLower(nameSearch) );
if(!emailSearch.empty())
baseQuery += baseQuery.empty() ? fmt::format(" Lower(email) like('%{}%' ", Poco::toLower(emailSearch))
: fmt::format(" and Lower(email) like('%{}%' ", Poco::toLower(emailSearch));
}
if(QB_.Select.empty()) {
Poco::JSON::Array ArrayObj;
Poco::JSON::Object Answer;
if (StorageService()->UserDB().GetUsers(QB_.Offset, QB_.Limit, Users)) {
if (StorageService()->UserDB().GetUsers(QB_.Offset, QB_.Limit, Users, baseQuery )) {
for (auto &i : Users) {
Poco::JSON::Object Obj;
if (IdOnly) {