Files
MuditaOS/module-db/Interface/NotificationsRecord.hpp
Alek Rudnik 019b5cf719 Egd 3338 missed calls home scree notifications (#463)
* [EGD-3338] Missed calls home screen notifications
2020-06-25 23:42:42 +02:00

86 lines
2.8 KiB
C++

#pragma once
#include "Common/Common.hpp"
#include "Databases/NotificationsDB.hpp"
#include "Record.hpp"
#include <utf8/UTF8.hpp>
#include <cstdint>
#include <vector>
// fw declarations
namespace db::query::notifications
{
class Get;
class GetResult;
class Increment;
class IncrementResult;
class Clear;
class ClearResult;
class GetAll;
class GetAllResult;
} // namespace db::query::notifications
struct NotificationsRecord : public Record
{
enum class Key
{
NotValidKey = 0,
Calls,
Sms,
NumberOfKeys // do not use directly
};
Key key = Key::NotValidKey;
uint32_t value = 0;
friend std::ostream &operator<<(std::ostream &out, const NotificationsRecord &point);
NotificationsRecord() = default;
~NotificationsRecord() = default;
NotificationsRecord(const NotificationsTableRow &tableRow);
bool isValidRecord() const;
bool gotValidKey() const;
static bool isValidKey(Key key);
};
enum class NotificationsRecordField
{
key
};
class NotificationsRecordInterface : public RecordInterface<NotificationsRecord, NotificationsRecordField>
{
public:
NotificationsRecordInterface(NotificationsDB *notificationsDb);
virtual ~NotificationsRecordInterface() = default;
bool Add(const NotificationsRecord &rec) override final;
bool RemoveByID(uint32_t id) override final;
bool RemoveByField(NotificationsRecordField field, const char *str) override final;
bool Update(const NotificationsRecord &rec) override final;
NotificationsRecord GetByID(uint32_t id) override final;
uint32_t GetCount() override final;
std::unique_ptr<std::vector<NotificationsRecord>> GetLimitOffset(uint32_t offset, uint32_t limit) override final;
std::unique_ptr<std::vector<NotificationsRecord>> GetLimitOffsetByField(uint32_t offset,
uint32_t limit,
NotificationsRecordField field,
const char *str) override final;
NotificationsRecord GetByKey(NotificationsRecord::Key key);
std::unique_ptr<db::QueryResult> runQuery(const db::Query *query) override;
private:
NotificationsDB *notificationsDb = nullptr;
std::unique_ptr<db::query::notifications::GetResult> runQueryImpl(const db::query::notifications::Get *query);
std::unique_ptr<db::query::notifications::IncrementResult> runQueryImpl(
const db::query::notifications::Increment *query);
std::unique_ptr<db::query::notifications::ClearResult> runQueryImpl(const db::query::notifications::Clear *query);
std::unique_ptr<db::query::notifications::GetAllResult> runQueryImpl(const db::query::notifications::GetAll *query);
};