// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "AlarmEventRecord.hpp" #include #include #include #include #include #include #include #include #include #include std::vector generateRecordsVector(const std::vector &tableRowVector); AlarmEventRecord::AlarmEventRecord(uint32_t id, const UTF8 &name, TimePoint startDate, uint32_t duration, bool isAllDay, const std::string &rruleText, const std::string &musicTone, bool enabled, uint32_t snoozeDuration) : EventRecord{id, name, startDate, duration, isAllDay, rruleText}, musicTone{musicTone}, enabled{enabled}, snoozeDuration{snoozeDuration} {}; AlarmEventRecord::AlarmEventRecord(const AlarmEventsTableRow &aeRow) : EventRecord{aeRow.ID, aeRow.name, aeRow.startDate, aeRow.duration, aeRow.isAllDay, aeRow.rruleText}, musicTone{aeRow.musicTone}, enabled{aeRow.enabled}, snoozeDuration{aeRow.snoozeDuration} {}; auto AlarmEventRecord::isValid() const -> bool { return (startDate != TIME_POINT_INVALID && ID != 0); } AlarmEventRecordInterface::AlarmEventRecordInterface(EventsDB *eventsDB) : eventsDB(eventsDB) {} AlarmEventRecordInterface::~AlarmEventRecordInterface() {} std::unique_ptr AlarmEventRecordInterface::runQuery(std::shared_ptr query) { if (typeid(*query) == typeid(db::query::alarmEvents::Add)) { return runQueryImplAdd(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::Edit)) { return runQueryImplEdit(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::Get)) { return runQueryImplGet(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::GetLimited)) { return runQueryImplGetLimited(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::GetBetweenDates)) { return runQueryImplGetBetweenDates(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::GetNext)) { return runQueryImplGetNext(std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::GetRecurringBetweenDates)) { return runQueryImplGetRecurringBetweenDates( std::static_pointer_cast(query)); } if (typeid(*query) == typeid(db::query::alarmEvents::Remove)) { return runQueryImplRemove(std::static_pointer_cast(query)); } return nullptr; } std::unique_ptr AlarmEventRecordInterface::runQueryImplAdd( std::shared_ptr query) { const auto result = eventsDB->alarmEvents.add(AlarmEventsTableRow(query->getRecord())); auto response = std::make_unique(result); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplEdit( std::shared_ptr query) { const auto result = eventsDB->alarmEvents.update(AlarmEventsTableRow(query->getRecord())); auto response = std::make_unique(result); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplGet( std::shared_ptr query) { const auto record = eventsDB->alarmEvents.getById(query->id); auto response = std::make_unique(AlarmEventRecord(record)); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplGetBetweenDates( std::shared_ptr query) { const auto [alarmEventsRows, count] = eventsDB->alarmEvents.getBetweenDates(query->start, query->end, query->offset, query->limit); const auto recordVector = generateRecordsVector(alarmEventsRows); auto response = std::make_unique(recordVector, count); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplGetLimited( std::shared_ptr query) { const auto alarmEventsRows = eventsDB->alarmEvents.getLimitOffset(query->offset, query->limit); const auto recordVector = generateRecordsVector(alarmEventsRows); auto response = std::make_unique(recordVector); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplGetNext( std::shared_ptr query) { const auto alarmEventsRows = eventsDB->alarmEvents.getNext(query->start, query->offset, query->limit); const auto recordVector = generateRecordsVector(alarmEventsRows); auto response = std::make_unique(recordVector); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface:: runQueryImplGetRecurringBetweenDates(std::shared_ptr query) { const auto alarmEventsRows = eventsDB->alarmEvents.getRecurringBetweenDates(query->start, query->end, query->offset, query->limit); const auto recordVector = generateRecordsVector(alarmEventsRows); auto response = std::make_unique(recordVector); response->setRequestQuery(query); return response; } std::unique_ptr AlarmEventRecordInterface::runQueryImplRemove( std::shared_ptr query) { const bool ret = eventsDB->alarmEvents.removeById(query->id); auto response = std::make_unique(ret); response->setRequestQuery(query); return response; } std::vector generateRecordsVector(const std::vector &tableRowVector) { std::vector recordVector; recordVector.reserve(tableRowVector.size()); for (const auto &row : tableRowVector) { recordVector.emplace_back(row); } return recordVector; } std::shared_ptr AlarmEventRecord::getCopy() { return std::make_shared(*this); }