// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "CalllogHelper.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace parserFSM; auto CalllogHelper::createDBEntry(Context &context) -> sys::ReturnCodes { return sys::ReturnCodes::Unresolved; } auto CalllogHelper::requestDataFromDB(Context &context) -> sys::ReturnCodes { if (context.getBody()[json::calllog::count] == true) { return getCalllogCount(context); } if (context.getBody()[json::calllog::contactId].int_value() != 0) { return getCalllogByContactID(context); } else { auto limit = context.getBody()[json::calllog::limit].int_value(); auto offset = context.getBody()[json::calllog::offset].int_value(); auto query = std::make_unique(limit, offset); auto listener = std::make_unique( [](db::QueryResult *result, Context context) { if (auto contactResult = dynamic_cast(result)) { auto recordsPtr = std::make_unique>(contactResult->getRecords()); json11::Json::array calllogArray; for (const auto &record : *recordsPtr) { calllogArray.emplace_back(CalllogHelper::to_json(record)); } context.setResponseBody(calllogArray); MessageHandler::putToSendQueue(context.createSimpleResponse()); return true; } else { return false; } }, context); query->setQueryListener(std::move(listener)); DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Calllog, std::move(query)); return sys::ReturnCodes::Success; } } auto CalllogHelper::getCalllogCount(Context &context) -> sys::ReturnCodes { auto query = std::make_unique(EntryState::ALL); auto listener = std::make_unique( [](db::QueryResult *result, Context context) { if (auto calllogResult = dynamic_cast(result)) { auto count = calllogResult->getCount(); context.setResponseBody(json11::Json::object({{json::calllog::count, static_cast(count)}})); MessageHandler::putToSendQueue(context.createSimpleResponse()); return true; } else { return false; } }, context); query->setQueryListener(std::move(listener)); DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Calllog, std::move(query)); return sys::ReturnCodes::Success; } auto CalllogHelper::getCalllogByContactID(Context &context) -> sys::ReturnCodes { auto query = std::make_unique(context.getBody()[json::calllog::contactId].int_value()); auto listener = std::make_unique( [](db::QueryResult *result, Context context) { if (auto calllogResult = dynamic_cast(result)) { auto records = calllogResult->getResults(); json11::Json::array calllogArray; for (const auto &record : records) { calllogArray.emplace_back(CalllogHelper::to_json(record)); } context.setResponseBody(calllogArray); MessageHandler::putToSendQueue(context.createSimpleResponse()); return true; } else { return false; } }, context); query->setQueryListener(std::move(listener)); DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Calllog, std::move(query)); return sys::ReturnCodes::Success; } auto CalllogHelper::updateDBEntry(Context &context) -> sys::ReturnCodes { return sys::ReturnCodes::Unresolved; } auto CalllogHelper::deleteDBEntry(Context &context) -> sys::ReturnCodes { auto query = std::make_unique(context.getBody()[json::calllog::id].int_value()); auto listener = std::make_unique( [](db::QueryResult *result, Context context) { if (auto calllogResult = dynamic_cast(result)) { context.setResponseStatus(calllogResult->getResults() ? http::Code::NoContent : http::Code::InternalServerError); MessageHandler::putToSendQueue(context.createSimpleResponse()); return true; } else { return false; } }, context); query->setQueryListener(std::move(listener)); DBServiceAPI::GetQuery(ownerServicePtr, db::Interface::Name::Calllog, std::move(query)); return sys::ReturnCodes::Success; } auto CalllogHelper::requestCount(Context &context) -> sys::ReturnCodes { return sys::ReturnCodes::Unresolved; } auto CalllogHelper::to_json(CalllogRecord record) -> json11::Json { std::unique_ptr ss = std::make_unique(); (*ss) << record.date; std::string date = ss->str(); ss->clear(); ss->str(std::string{}); (*ss) << record.duration; std::string duration = ss->str(); auto recordEntry = json11::Json::object{{json::calllog::presentation, static_cast(record.presentation)}, {json::calllog::date, date}, {json::calllog::duration, duration}, {json::calllog::id, static_cast(record.ID)}, {json::calllog::type, static_cast(record.type)}, {json::calllog::name, record.name.c_str()}, {json::calllog::contactId, static_cast(record.getContactId())}, {json::calllog::phoneNumber, record.phoneNumber.getEntered()}, {json::calllog::isRead, record.isRead}}; return recordEntry; }