mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-02 10:58:45 -05:00
This API allows for managing message templates order. DB Migration: adding a new column to templates tables.
136 lines
4.2 KiB
C++
136 lines
4.2 KiB
C++
// 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();
|
|
}
|