#pragma once #include #include "Record.hpp" #include "ThreadRecord.hpp" #include "module-db/Databases/SmsDB.hpp" #include "module-db/Databases/ContactsDB.hpp" #include "module-db/Common/Common.hpp" #include #include namespace db::query { class SMSSearchByType; // Forward declaration class SMSSearchByTypeResult; // Forward declaration } // namespace db::query struct SMSRecord : public Record { uint32_t date = 0; uint32_t dateSent = 0; uint32_t errorCode = 0; UTF8 body; SMSType type = SMSType::UNKNOWN; uint32_t threadID = 0; uint32_t contactID = 0; utils::PhoneNumber::View number; SMSRecord() = default; SMSRecord(const SMSTableRow &, const utils::PhoneNumber::View &); }; enum class SMSRecordField { Number, ThreadID, ContactID }; class SMSRecordInterface : public RecordInterface { public: SMSRecordInterface(SmsDB *smsDb, ContactsDB *contactsDb); ~SMSRecordInterface() = default; bool Add(const SMSRecord &rec) override final; bool RemoveByID(uint32_t id) override final; bool RemoveByField(SMSRecordField field, const char *str) override final; bool Update(const SMSRecord &recUpdated) override final; SMSRecord GetByID(uint32_t id) override final; uint32_t GetCount() override final; uint32_t GetLastID(void); std::unique_ptr> GetLimitOffset(uint32_t offset, uint32_t limit) override final; std::unique_ptr> GetLimitOffsetByField(uint32_t offset, uint32_t limit, SMSRecordField field, const char *str) override final; std::unique_ptr runQuery(std::shared_ptr query) override; private: static const uint32_t snippetLength = 45; SmsDB *smsDB = nullptr; ContactsDB *contactsDB = nullptr; static void UpdateThreadSummary(ThreadRecord &threadToUpdate, const SMSRecord &rec); std::unique_ptr runQueryImpl(const db::query::SMSSearchByType *query); std::unique_ptr getByIDQuery(std::shared_ptr query); std::unique_ptr getByContactIDQuery(std::shared_ptr query); std::unique_ptr getByTextQuery(std::shared_ptr query); std::unique_ptr getCountQuery(std::shared_ptr query); std::unique_ptr addQuery(std::shared_ptr query); std::unique_ptr removeQuery(std::shared_ptr query); std::unique_ptr updateQuery(std::shared_ptr query); std::unique_ptr getQuery(std::shared_ptr query); std::unique_ptr getByThreadIDQuery(std::shared_ptr query); std::unique_ptr getCountByThreadIDQuery(std::shared_ptr query); std::unique_ptr getLastByThreadIDQuery(std::shared_ptr query); };