mirror of
https://github.com/Telecominfraproject/wlan-cloud-owprov.git
synced 2025-11-03 20:17:54 +00:00
Signed-off-by: stephb9959 <stephane.bourque@gmail.com>
This commit is contained in:
@@ -6,127 +6,132 @@
|
||||
// Arilia Wireless Inc.
|
||||
//
|
||||
|
||||
|
||||
#include "RESTAPI_inventory_list_handler.h"
|
||||
#include "StorageService.h"
|
||||
#include "RESTAPI/RESTAPI_db_helpers.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi{
|
||||
void RESTAPI_inventory_list_handler::SendList( const ProvObjects::InventoryTagVec & Tags, bool SerialOnly) {
|
||||
Poco::JSON::Array Array;
|
||||
for(const auto &i:Tags) {
|
||||
if(SerialOnly) {
|
||||
Array.add(i.serialNumber);
|
||||
} else {
|
||||
Poco::JSON::Object O;
|
||||
i.to_json(O);
|
||||
if(QB_.AdditionalInfo)
|
||||
AddExtendedInfo(i,O);
|
||||
Array.add(O);
|
||||
}
|
||||
}
|
||||
Poco::JSON::Object Answer;
|
||||
if(SerialOnly)
|
||||
Answer.set("serialNumbers", Array);
|
||||
else
|
||||
Answer.set("taglist", Array);
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
namespace OpenWifi {
|
||||
void RESTAPI_inventory_list_handler::SendList(const ProvObjects::InventoryTagVec &Tags,
|
||||
bool SerialOnly) {
|
||||
Poco::JSON::Array Array;
|
||||
for (const auto &i : Tags) {
|
||||
if (SerialOnly) {
|
||||
Array.add(i.serialNumber);
|
||||
} else {
|
||||
Poco::JSON::Object O;
|
||||
i.to_json(O);
|
||||
if (QB_.AdditionalInfo)
|
||||
AddExtendedInfo(i, O);
|
||||
Array.add(O);
|
||||
}
|
||||
}
|
||||
Poco::JSON::Object Answer;
|
||||
if (SerialOnly)
|
||||
Answer.set("serialNumbers", Array);
|
||||
else
|
||||
Answer.set("taglist", Array);
|
||||
ReturnObject(Answer);
|
||||
}
|
||||
|
||||
void RESTAPI_inventory_list_handler::DoGet() {
|
||||
void RESTAPI_inventory_list_handler::DoGet() {
|
||||
|
||||
if(GetBoolParameter("orderSpec")) {
|
||||
return ReturnFieldList(DB_,*this);
|
||||
}
|
||||
if (GetBoolParameter("orderSpec")) {
|
||||
return ReturnFieldList(DB_, *this);
|
||||
}
|
||||
|
||||
bool SerialOnly=GetBoolParameter("serialOnly");
|
||||
bool SerialOnly = GetBoolParameter("serialOnly");
|
||||
|
||||
std::string UUID;
|
||||
std::string Arg,Arg2;
|
||||
std::string UUID;
|
||||
std::string Arg, Arg2;
|
||||
|
||||
std::string OrderBy{" ORDER BY serialNumber ASC "};
|
||||
if(HasParameter("orderBy",Arg)) {
|
||||
if(!DB_.PrepareOrderBy(Arg,OrderBy)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidLOrderBy);
|
||||
}
|
||||
}
|
||||
std::string OrderBy{" ORDER BY serialNumber ASC "};
|
||||
if (HasParameter("orderBy", Arg)) {
|
||||
if (!DB_.PrepareOrderBy(Arg, OrderBy)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidLOrderBy);
|
||||
}
|
||||
}
|
||||
|
||||
if(!QB_.Select.empty()) {
|
||||
return ReturnRecordList<decltype(DB_)>("taglist",DB_,*this );
|
||||
} else if(HasParameter("entity",UUID)) {
|
||||
if(QB_.CountOnly) {
|
||||
auto C = DB_.Count( StorageService()->InventoryDB().OP("entity",ORM::EQ,UUID));
|
||||
return ReturnCountOnly( C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, DB_.OP("entity",ORM::EQ,UUID), OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if(HasParameter("venue",UUID)) {
|
||||
if(QB_.CountOnly) {
|
||||
auto C = DB_.Count(DB_.OP("venue",ORM::EQ,UUID));
|
||||
return ReturnCountOnly( C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, DB_.OP("venue",ORM::EQ,UUID), OrderBy);
|
||||
return SendList( Tags, SerialOnly);
|
||||
} else if(GetBoolParameter("subscribersOnly") && GetBoolParameter("unassigned")) {
|
||||
if(QB_.CountOnly) {
|
||||
auto C = DB_.Count(" devClass='subscriber' and subscriber='' ");
|
||||
return ReturnCountOnly( C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, " devClass='subscriber' and subscriber='' ", OrderBy);
|
||||
if(QB_.CountOnly) {
|
||||
auto C = DB_.Count(DB_.OP("venue",ORM::EQ,UUID));
|
||||
return ReturnCountOnly( C);
|
||||
}
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if(GetBoolParameter("subscribersOnly")) {
|
||||
if(QB_.CountOnly) {
|
||||
auto C = DB_.Count(" devClass='subscriber' and subscriber!='' ");
|
||||
return ReturnCountOnly( C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags," devClass='subscriber' and subscriber!='' ", OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if(GetBoolParameter("unassigned")) {
|
||||
if(QB_.CountOnly) {
|
||||
std::string Empty;
|
||||
auto C = DB_.Count( InventoryDB::OP( DB_.OP("venue",ORM::EQ,Empty),
|
||||
ORM::AND, DB_.OP("entity",ORM::EQ,Empty) ));
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
std::string Empty;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, InventoryDB::OP( DB_.OP("venue",ORM::EQ,Empty),
|
||||
ORM::AND, DB_.OP("entity",ORM::EQ,Empty) ) , OrderBy );
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (HasParameter("subscriber",Arg) && !Arg.empty()) {
|
||||
// looking for device(s) for a specific subscriber...
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(0,100,Tags," subscriber='" + ORM::Escape(Arg) + "'");
|
||||
if(SerialOnly) {
|
||||
std::vector<std::string> SerialNumbers;
|
||||
std::transform(cbegin(Tags), cend(Tags), std::back_inserter(SerialNumbers), [](const auto &T) { return T.serialNumber; });
|
||||
return ReturnObject("serialNumbers",SerialNumbers);
|
||||
} else {
|
||||
return MakeJSONObjectArray("taglist", Tags, *this);
|
||||
}
|
||||
} else if (QB_.CountOnly) {
|
||||
auto C = DB_.Count();
|
||||
return ReturnCountOnly(C);
|
||||
} else if (GetBoolParameter("rrmOnly")) {
|
||||
Types::UUIDvec_t DeviceList;
|
||||
DB_.GetRRMDeviceList(DeviceList);
|
||||
if(QB_.CountOnly)
|
||||
return ReturnCountOnly(DeviceList.size());
|
||||
else {
|
||||
return ReturnObject("serialNumbers",DeviceList);
|
||||
}
|
||||
} else {
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset,QB_.Limit,Tags,"",OrderBy);
|
||||
return MakeJSONObjectArray("taglist", Tags, *this);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!QB_.Select.empty()) {
|
||||
return ReturnRecordList<decltype(DB_)>("taglist", DB_, *this);
|
||||
} else if (HasParameter("entity", UUID)) {
|
||||
if (QB_.CountOnly) {
|
||||
auto C = DB_.Count(StorageService()->InventoryDB().OP("entity", ORM::EQ, UUID));
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, DB_.OP("entity", ORM::EQ, UUID), OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (HasParameter("venue", UUID)) {
|
||||
if (QB_.CountOnly) {
|
||||
auto C = DB_.Count(DB_.OP("venue", ORM::EQ, UUID));
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, DB_.OP("venue", ORM::EQ, UUID), OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (GetBoolParameter("subscribersOnly") && GetBoolParameter("unassigned")) {
|
||||
if (QB_.CountOnly) {
|
||||
auto C = DB_.Count(" devClass='subscriber' and subscriber='' ");
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, " devClass='subscriber' and subscriber='' ",
|
||||
OrderBy);
|
||||
if (QB_.CountOnly) {
|
||||
auto C = DB_.Count(DB_.OP("venue", ORM::EQ, UUID));
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (GetBoolParameter("subscribersOnly")) {
|
||||
if (QB_.CountOnly) {
|
||||
auto C = DB_.Count(" devClass='subscriber' and subscriber!='' ");
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags,
|
||||
" devClass='subscriber' and subscriber!='' ", OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (GetBoolParameter("unassigned")) {
|
||||
if (QB_.CountOnly) {
|
||||
std::string Empty;
|
||||
auto C = DB_.Count(InventoryDB::OP(DB_.OP("venue", ORM::EQ, Empty), ORM::AND,
|
||||
DB_.OP("entity", ORM::EQ, Empty)));
|
||||
return ReturnCountOnly(C);
|
||||
}
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
std::string Empty;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags,
|
||||
InventoryDB::OP(DB_.OP("venue", ORM::EQ, Empty), ORM::AND,
|
||||
DB_.OP("entity", ORM::EQ, Empty)),
|
||||
OrderBy);
|
||||
return SendList(Tags, SerialOnly);
|
||||
} else if (HasParameter("subscriber", Arg) && !Arg.empty()) {
|
||||
// looking for device(s) for a specific subscriber...
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(0, 100, Tags, " subscriber='" + ORM::Escape(Arg) + "'");
|
||||
if (SerialOnly) {
|
||||
std::vector<std::string> SerialNumbers;
|
||||
std::transform(cbegin(Tags), cend(Tags), std::back_inserter(SerialNumbers),
|
||||
[](const auto &T) { return T.serialNumber; });
|
||||
return ReturnObject("serialNumbers", SerialNumbers);
|
||||
} else {
|
||||
return MakeJSONObjectArray("taglist", Tags, *this);
|
||||
}
|
||||
} else if (QB_.CountOnly) {
|
||||
auto C = DB_.Count();
|
||||
return ReturnCountOnly(C);
|
||||
} else if (GetBoolParameter("rrmOnly")) {
|
||||
Types::UUIDvec_t DeviceList;
|
||||
DB_.GetRRMDeviceList(DeviceList);
|
||||
if (QB_.CountOnly)
|
||||
return ReturnCountOnly(DeviceList.size());
|
||||
else {
|
||||
return ReturnObject("serialNumbers", DeviceList);
|
||||
}
|
||||
} else {
|
||||
ProvObjects::InventoryTagVec Tags;
|
||||
DB_.GetRecords(QB_.Offset, QB_.Limit, Tags, "", OrderBy);
|
||||
return MakeJSONObjectArray("taglist", Tags, *this);
|
||||
}
|
||||
}
|
||||
} // namespace OpenWifi
|
||||
Reference in New Issue
Block a user