Files
archived-wlan-cloud-analytics/src/RESTAPI/RESTAPI_board_handler.cpp
2022-08-10 23:07:05 -07:00

102 lines
3.3 KiB
C++

//
// Created by stephane bourque on 2022-03-11.
//
#include "RESTAPI_board_handler.h"
#include "VenueCoordinator.h"
namespace OpenWifi {
void RESTAPI_board_handler::DoGet() {
auto id = GetBinding("id","");
if(id.empty()) {
return BadRequest(RESTAPI::Errors::MissingUUID);
}
AnalyticsObjects::BoardInfo B;
if(!StorageService()->BoardsDB().GetRecord("id",id,B)) {
return NotFound();
}
Poco::JSON::Object Answer;
B.to_json(Answer);
return ReturnObject(Answer);
}
void RESTAPI_board_handler::DoDelete() {
auto id = GetBinding("id","");
if(id.empty()) {
return BadRequest(RESTAPI::Errors::MissingUUID);
}
AnalyticsObjects::BoardInfo B;
if(!StorageService()->BoardsDB().GetRecord("id",id,B)) {
return NotFound();
}
VenueCoordinator()->StopBoard(id);
StorageService()->BoardsDB().DeleteRecord("id",id);
StorageService()->TimePointsDB().DeleteBoard(id);
return OK();
}
void RESTAPI_board_handler::DoPost() {
auto id= GetBinding("id","");
if(id.empty()) {
return BadRequest(RESTAPI::Errors::MissingUUID);
}
const auto & RawObject = ParsedBody_;
AnalyticsObjects::BoardInfo NewObject;
if(!NewObject.from_json(RawObject)) {
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
}
ProvObjects::CreateObjectInfo(RawObject,UserInfo_.userinfo,NewObject.info);
if(StorageService()->BoardsDB().CreateRecord(NewObject)) {
VenueCoordinator()->AddBoard(NewObject.info.id);
AnalyticsObjects::BoardInfo NewBoard;
StorageService()->BoardsDB().GetRecord("id",NewObject.info.id,NewBoard);
Poco::JSON::Object Answer;
NewBoard.to_json(Answer);
return ReturnObject(Answer);
}
return InternalError(RESTAPI::Errors::RecordNotCreated);
}
void RESTAPI_board_handler::DoPut() {
auto id= GetBinding("id","");
if(id.empty()) {
return BadRequest(RESTAPI::Errors::MissingUUID);
}
AnalyticsObjects::BoardInfo Existing;
if(!StorageService()->BoardsDB().GetRecord("id",id,Existing)) {
return NotFound();
}
const auto & RawObject = ParsedBody_;
AnalyticsObjects::BoardInfo NewObject;
if(!NewObject.from_json(RawObject)) {
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
}
ProvObjects::UpdateObjectInfo(RawObject,UserInfo_.userinfo,Existing.info);
if(RawObject->has("venueList")) {
if(NewObject.venueList.empty()) {
return BadRequest(RESTAPI::Errors::VenueMustExist);
}
Existing.venueList = NewObject.venueList;
}
if(StorageService()->BoardsDB().UpdateRecord("id",Existing.info.id,Existing)) {
VenueCoordinator()->UpdateBoard(Existing.info.id);
AnalyticsObjects::BoardInfo NewBoard;
StorageService()->BoardsDB().GetRecord("id",Existing.info.id,NewBoard);
Poco::JSON::Object Answer;
NewBoard.to_json(Answer);
return ReturnObject(Answer);
}
return InternalError(RESTAPI::Errors::RecordNotUpdated);
}
}