mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-16 01:48:42 -05:00
209 lines
6.6 KiB
C++
209 lines
6.6 KiB
C++
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include "AlarmsRecord.hpp"
|
|
#include "queries/alarms/QueryAlarmsAdd.hpp"
|
|
#include "queries/alarms/QueryAlarmsRemove.hpp"
|
|
#include "queries/alarms/QueryAlarmsEdit.hpp"
|
|
#include "queries/alarms/QueryAlarmsGet.hpp"
|
|
#include "queries/alarms/QueryAlarmsGetLimited.hpp"
|
|
#include "queries/alarms/QueryAlarmsTurnOffAll.hpp"
|
|
|
|
AlarmsRecord::AlarmsRecord(const AlarmsTableRow &tableRow)
|
|
: Record{tableRow.ID}, time{tableRow.time}, snooze{tableRow.snooze}, status{tableRow.status},
|
|
repeat{tableRow.repeat}, path{tableRow.path}
|
|
{}
|
|
|
|
AlarmsRecordInterface::AlarmsRecordInterface(AlarmsDB *alarmsDb) : alarmsDB(alarmsDb)
|
|
{}
|
|
|
|
AlarmsRecordInterface::~AlarmsRecordInterface()
|
|
{}
|
|
|
|
bool AlarmsRecordInterface::Add(const AlarmsRecord &rec)
|
|
{
|
|
// Create alarm
|
|
alarmsDB->alarms.add(AlarmsTableRow(rec));
|
|
|
|
return true;
|
|
}
|
|
|
|
uint32_t AlarmsRecordInterface::GetCount()
|
|
{
|
|
return alarmsDB->alarms.count();
|
|
}
|
|
|
|
std::unique_ptr<std::vector<AlarmsRecord>> AlarmsRecordInterface::GetLimitOffsetByField(uint32_t offset,
|
|
uint32_t limit,
|
|
AlarmsRecordField field,
|
|
const char *str)
|
|
{
|
|
auto records = std::make_unique<std::vector<AlarmsRecord>>();
|
|
|
|
std::vector<AlarmsTableRow> alarm;
|
|
|
|
switch (field) {
|
|
case AlarmsRecordField::Time:
|
|
alarm = alarmsDB->alarms.getLimitOffsetByField(offset, limit, AlarmsTableFields::Time, str);
|
|
break;
|
|
case AlarmsRecordField::Snooze:
|
|
alarm = alarmsDB->alarms.getLimitOffsetByField(offset, limit, AlarmsTableFields::Snooze, str);
|
|
break;
|
|
case AlarmsRecordField::Status:
|
|
alarm = alarmsDB->alarms.getLimitOffsetByField(offset, limit, AlarmsTableFields::Status, str);
|
|
break;
|
|
default:
|
|
return records;
|
|
}
|
|
return records;
|
|
}
|
|
|
|
std::unique_ptr<std::vector<AlarmsRecord>> AlarmsRecordInterface::GetLimitOffset(uint32_t offset, uint32_t limit)
|
|
{
|
|
auto alarms = alarmsDB->alarms.getLimitOffset(offset, limit);
|
|
|
|
auto records = std::make_unique<std::vector<AlarmsRecord>>();
|
|
|
|
for (const auto &alarm : alarms) {
|
|
records->push_back(AlarmsRecord(alarm));
|
|
}
|
|
|
|
return records;
|
|
}
|
|
|
|
bool AlarmsRecordInterface::Update(const AlarmsRecord &rec)
|
|
{
|
|
|
|
auto alarm = alarmsDB->alarms.getById(rec.ID);
|
|
if (alarm.ID == 0) {
|
|
return false;
|
|
}
|
|
|
|
alarmsDB->alarms.update(AlarmsTableRow(rec));
|
|
|
|
return true;
|
|
}
|
|
|
|
bool AlarmsRecordInterface::RemoveByID(uint32_t id)
|
|
{
|
|
|
|
auto alarm = alarmsDB->alarms.getById(id);
|
|
if (alarm.ID == 0) {
|
|
return false;
|
|
}
|
|
|
|
// Remove alarm
|
|
if (alarmsDB->alarms.removeById(id) == false) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool AlarmsRecordInterface::RemoveByField(AlarmsRecordField field, const char *str)
|
|
{
|
|
|
|
switch (field) {
|
|
case AlarmsRecordField::Time:
|
|
return alarmsDB->alarms.removeByField(AlarmsTableFields::Time, str);
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
AlarmsRecord AlarmsRecordInterface::GetByID(uint32_t id)
|
|
{
|
|
return AlarmsRecord(alarmsDB->alarms.getById(id));
|
|
}
|
|
|
|
bool AlarmsRecordInterface::TurnOffAll()
|
|
{
|
|
return alarmsDB->alarms.updateStatuses(AlarmStatus::Off);
|
|
}
|
|
|
|
std::unique_ptr<db::QueryResult> AlarmsRecordInterface::runQuery(std::shared_ptr<db::Query> query)
|
|
{
|
|
if (typeid(*query) == typeid(db::query::alarms::Get)) {
|
|
return runQueryImplGetResult(query);
|
|
}
|
|
if (typeid(*query) == typeid(db::query::alarms::GetLimited)) {
|
|
return runQueryImplGetLimitedResult(query);
|
|
}
|
|
if (typeid(*query) == typeid(db::query::alarms::TurnOffAll)) {
|
|
return runQueryImplTurnOffAll(query);
|
|
}
|
|
if (typeid(*query) == typeid(db::query::alarms::Add)) {
|
|
return runQueryImplAdd(query);
|
|
}
|
|
if (typeid(*query) == typeid(db::query::alarms::Remove)) {
|
|
return runQueryImplRemove(query);
|
|
}
|
|
if (typeid(*query) == typeid(db::query::alarms::Edit)) {
|
|
return runQueryImplEdit(query);
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::GetResult> AlarmsRecordInterface::runQueryImplGetResult(
|
|
std::shared_ptr<db::Query> query)
|
|
{
|
|
auto getQuery = static_cast<db::query::alarms::Get *>(query.get());
|
|
auto records = GetByID(getQuery->id);
|
|
auto response = std::make_unique<db::query::alarms::GetResult>(records);
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::GetLimitedResult> AlarmsRecordInterface::runQueryImplGetLimitedResult(
|
|
std::shared_ptr<db::Query> query)
|
|
{
|
|
auto getLimitedQuery = static_cast<db::query::alarms::GetLimited *>(query.get());
|
|
auto records = GetLimitOffset(getLimitedQuery->offset, getLimitedQuery->limit);
|
|
std::vector<AlarmsRecord> recordVector;
|
|
|
|
for (const auto &alarm : *records) {
|
|
recordVector.emplace_back(alarm);
|
|
}
|
|
auto response = std::make_unique<db::query::alarms::GetLimitedResult>(recordVector, GetCount());
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::AddResult> AlarmsRecordInterface::runQueryImplAdd(std::shared_ptr<db::Query> query)
|
|
{
|
|
auto addQuery = static_cast<db::query::alarms::Add *>(query.get());
|
|
bool ret = Add(addQuery->getRecord());
|
|
auto response = std::make_unique<db::query::alarms::AddResult>(ret);
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::RemoveResult> AlarmsRecordInterface::runQueryImplRemove(
|
|
std::shared_ptr<db::Query> query)
|
|
{
|
|
auto removeQuery = static_cast<db::query::alarms::Remove *>(query.get());
|
|
bool ret = RemoveByID(removeQuery->id);
|
|
auto response = std::make_unique<db::query::alarms::RemoveResult>(ret);
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::EditResult> AlarmsRecordInterface::runQueryImplEdit(std::shared_ptr<db::Query> query)
|
|
{
|
|
auto editQuery = static_cast<db::query::alarms::Edit *>(query.get());
|
|
bool ret = Update(editQuery->getRecord());
|
|
auto response = std::make_unique<db::query::alarms::EditResult>(ret);
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|
|
|
|
std::unique_ptr<db::query::alarms::TurnOffAllResult> AlarmsRecordInterface::runQueryImplTurnOffAll(
|
|
std::shared_ptr<db::Query> query)
|
|
{
|
|
auto result = TurnOffAll();
|
|
auto response = std::make_unique<db::query::alarms::TurnOffAllResult>(result);
|
|
response->setRequestQuery(query);
|
|
return response;
|
|
}
|