// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include "EventRecord.hpp" #include #include namespace db::query::alarmEvents { class Add; class AddResult; class Edit; class EditResult; class Get; class GetEnabled; class GetEnabledResult; class GetInRange; class GetInRangeResult; class GetNext; class GetNextResult; class GetRecurring; class GetRecurringResult; class GetResult; class Remove; class RemoveResult; class ToggleAll; class ToggleAllResult; } // namespace db::query::alarmEvents using namespace std::chrono_literals; struct AlarmTime { std::chrono::hours hourOfDay; std::chrono::minutes minuteOfHour; AlarmTime(std::chrono::hours hourOfDay, std::chrono::minutes minuteOfHour) : hourOfDay{hourOfDay}, minuteOfHour{minuteOfHour} {} }; struct AlarmEventRecord : public EventRecord { AlarmTime alarmTime{0h, 0min}; std::string musicTone; bool enabled{false}; uint32_t snoozeDuration{0}; std::string rruleText; AlarmEventRecord() = default; AlarmEventRecord(uint32_t id, const AlarmTime alarmTime, const std::string &musicTone, bool enabled, uint32_t snoozeDuration, const std::string &rruleText); explicit AlarmEventRecord(const AlarmEventsTableRow &aeRow); std::shared_ptr getCopy() override; auto isValid() const -> bool; auto getNextSingleEvent(TimePoint from) -> SingleEventRecord; }; class AlarmEventRecordInterface : public db::Interface { public: explicit AlarmEventRecordInterface(EventsDB *eventsDB); virtual ~AlarmEventRecordInterface() noexcept = default; std::unique_ptr runQuery(std::shared_ptr query) override; private: EventsDB *eventsDB; std::unique_ptr runQueryImplAdd( std::shared_ptr query); std::unique_ptr runQueryImplEdit( std::shared_ptr query); std::unique_ptr runQueryImplGet( std::shared_ptr query); std::unique_ptr runQueryImplGetEnabled( std::shared_ptr query); std::unique_ptr runQueryImplGetInRange( std::shared_ptr query); std::unique_ptr runQueryImplRemove( std::shared_ptr query); std::unique_ptr runQueryImplRemove( std::shared_ptr query); };