// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Record.hpp" #include "module-db/Databases/AlarmsDB.hpp" #include "module-db/Common/Common.hpp" #include #include #include namespace db::query::alarms { class Add; class AddResult; class Edit; class EditResult; class Get; class GetResult; class GetLimited; class GetLimitedResult; class Remove; class RemoveResult; class TurnOffAll; class TurnOffAllResult; } // namespace db::query::alarms struct AlarmsRecord : public Record { TimePoint time = TIME_POINT_INVALID; uint32_t snooze = 0; AlarmStatus status = AlarmStatus::On; uint32_t repeat = 0; UTF8 path; AlarmsRecord() = default; explicit AlarmsRecord(const AlarmsTableRow &tableRow); }; enum class AlarmsRecordField { Time, Snooze, Status, Path }; class AlarmsRecordInterface : public RecordInterface { public: AlarmsRecordInterface(AlarmsDB *alarmsDb); ~AlarmsRecordInterface(); bool Add(const AlarmsRecord &rec) override final; bool RemoveByID(uint32_t id) override final; bool RemoveByField(AlarmsRecordField field, const char *str) override final; bool Update(const AlarmsRecord &rec) override final; AlarmsRecord GetByID(uint32_t id) override final; uint32_t GetCount() override final; bool TurnOffAll(); std::unique_ptr> GetLimitOffset(uint32_t offset, uint32_t limit) override final; std::unique_ptr> GetLimitOffsetByField(uint32_t offset, uint32_t limit, AlarmsRecordField field, const char *str) override final; std::unique_ptr runQuery(std::shared_ptr query) override; private: AlarmsDB *alarmsDB; std::unique_ptr runQueryImplAdd(std::shared_ptr query); std::unique_ptr runQueryImplRemove(std::shared_ptr query); std::unique_ptr runQueryImplEdit(std::shared_ptr query); std::unique_ptr runQueryImplGetResult(std::shared_ptr query); std::unique_ptr runQueryImplGetLimitedResult(std::shared_ptr query); std::unique_ptr runQueryImplTurnOffAll(std::shared_ptr query); };