// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "SMSTemplateTable.hpp"
#include "Common/Types.hpp"
#include <Utils.hpp>
#include <log/log.hpp>
#include <cassert>
SMSTemplateTable::SMSTemplateTable(Database *db) : Table(db)
{}
SMSTemplateTable::~SMSTemplateTable()
{}
bool SMSTemplateTable::create()
{
return true;
}
bool SMSTemplateTable::add(SMSTemplateTableRow entry)
{
auto retQuery = db->query("SELECT MAX(rowOrder) FROM templates;");
if ((retQuery == nullptr) || (retQuery->getRowCount() == 0)) {
return false;
}
auto lastOrderValue = (*retQuery)[0].getUInt32() + 1;
return db->execute("INSERT or ignore INTO templates (text, lastUsageTimestamp, rowOrder) VALUES (" str_c str_c u32_
");",
entry.text.c_str(),
utils::to_string(entry.lastUsageTimestamp).c_str(),
lastOrderValue);
}
bool SMSTemplateTable::removeById(uint32_t id)
{
return db->execute("DELETE FROM templates where _id = %" PRIu32 ";", id);
}
bool SMSTemplateTable::removeByField(SMSTemplateTableFields field, const char *str)
{
assert(0 && "Not implemented");
return false;
}
bool SMSTemplateTable::update(SMSTemplateTableRow entry)
{
return db->execute("UPDATE templates SET text = '%q', lastUsageTimestamp = %q, rowOrder = %" PRIu32
" WHERE _id=%" PRIu32 ";",
entry.text.c_str(),
utils::to_string(entry.lastUsageTimestamp).c_str(),
entry.order,
entry.ID);
}
SMSTemplateTableRow SMSTemplateTable::getById(uint32_t id)
{
auto retQuery = db->query("SELECT * FROM templates WHERE _id = %" PRIu32 ";", id);
if ((retQuery == nullptr) || (retQuery->getRowCount() == 0)) {
return SMSTemplateTableRow();
}
return SMSTemplateTableRow{
(*retQuery)[0].getUInt32(), // ID
(*retQuery)[1].getString(), // text
static_cast<time_t>((*retQuery)[2].getUInt64()), // lastUsageTimestamp
(*retQuery)[3].getUInt32(), // order
};
}
std::vector<SMSTemplateTableRow> SMSTemplateTable::getLimitOffset(uint32_t offset, uint32_t limit)
{
auto retQuery = db->query(
"SELECT * from templates ORDER BY rowOrder DESC LIMIT %" PRIu32 " OFFSET %" PRIu32 ";", limit, offset);
if ((retQuery == nullptr) || (retQuery->getRowCount() == 0)) {
return std::vector<SMSTemplateTableRow>();
}
std::vector<SMSTemplateTableRow> ret;
do {
ret.push_back(SMSTemplateTableRow{
(*retQuery)[0].getUInt32(), // ID
(*retQuery)[1].getString(), // text
static_cast<time_t>((*retQuery)[2].getUInt64()), // lastUsageTimestamp
(*retQuery)[3].getUInt32(), // order
});
} while (retQuery->nextRow());
return ret;
}
std::vector<SMSTemplateTableRow> SMSTemplateTable::getLimitOffsetByField(uint32_t offset,
uint32_t limit,
SMSTemplateTableFields field,
const char *str)
{
assert(0 && "Not implemented");
return std::vector<SMSTemplateTableRow>();
}
uint32_t SMSTemplateTable::count()
{
auto queryRet = db->query("SELECT COUNT(*) FROM templates;");
if (!queryRet || queryRet->getRowCount() == 0) {
return 0;
}
return (*queryRet)[0].getUInt32();
}
uint32_t SMSTemplateTable::countByFieldId(const char *field, uint32_t id)
{
auto queryRet = db->query("SELECT COUNT(*) FROM templates WHERE '%q'=%" PRIu32 ";", field, id);
if ((queryRet == nullptr) || (queryRet->getRowCount() == 0)) {
return 0;
}
return (*queryRet)[0].getUInt32();
}
uint32_t SMSTemplateTable::getLastId()
{
auto queryRet = db->query("SELECT MAX(_id) FROM templates;");
if ((queryRet == nullptr) || (queryRet->getRowCount() == 0)) {
return 0;
}
return (*queryRet)[0].getUInt32();
}