#include "templatedao.h" #include #include #include #include #include #include #include bool TemplateDao::insert(Template& tmpl) { QSqlDatabase db = DatabaseManager::instance().database(); QSqlQuery query(db); query.prepare( "INSERT INTO Template (accountId, name, subject, bodyHtml, bodyText, variables, isDefault, createdAt, updatedAt) " "VALUES (:accountId, :name, :subject, :bodyHtml, :bodyText, :variables, :isDefault, :createdAt, :updatedAt)" ); query.bindValue(":accountId", tmpl.accountId >= 0 ? tmpl.accountId : QVariant()); query.bindValue(":name", tmpl.name); query.bindValue(":subject", tmpl.subject); query.bindValue(":bodyHtml", tmpl.bodyHtml); query.bindValue(":bodyText", tmpl.bodyText); QJsonArray varsArray; for (const TemplateVariable& var : tmpl.variables) { QJsonObject varObj; varObj["name"] = var.name; varObj["label"] = var.label; varObj["defaultValue"] = var.defaultValue; varObj["type"] = var.type; varObj["options"] = QJsonArray::fromStringList(var.options); varsArray.append(varObj); } QJsonDocument varsDoc(varsArray); query.bindValue(":variables", varsDoc.toJson(QJsonDocument::Compact)); query.bindValue(":isDefault", tmpl.isDefault ? 1 : 0); query.bindValue(":createdAt", QDateTime::currentDateTime()); query.bindValue(":updatedAt", QDateTime::currentDateTime()); if (!query.exec()) { qWarning() << "Failed to insert template:" << query.lastError().text(); return false; } tmpl.id = query.lastInsertId().toLongLong(); return true; } bool TemplateDao::update(const Template& tmpl) { QSqlDatabase db = DatabaseManager::instance().database(); QSqlQuery query(db); query.prepare( "UPDATE Template SET " "accountId = :accountId, " "name = :name, " "subject = :subject, " "bodyHtml = :bodyHtml, " "bodyText = :bodyText, " "variables = :variables, " "isDefault = :isDefault, " "updatedAt = :updatedAt " "WHERE id = :id" ); query.bindValue(":id", tmpl.id); query.bindValue(":accountId", tmpl.accountId >= 0 ? tmpl.accountId : QVariant()); query.bindValue(":name", tmpl.name); query.bindValue(":subject", tmpl.subject); query.bindValue(":bodyHtml", tmpl.bodyHtml); query.bindValue(":bodyText", tmpl.bodyText); QJsonArray varsArray; for (const TemplateVariable& var : tmpl.variables) { QJsonObject varObj; varObj["name"] = var.name; varObj["label"] = var.label; varObj["defaultValue"] = var.defaultValue; varObj["type"] = var.type; varObj["options"] = QJsonArray::fromStringList(var.options); varsArray.append(varObj); } QJsonDocument varsDoc(varsArray); query.bindValue(":variables", varsDoc.toJson(QJsonDocument::Compact)); query.bindValue(":isDefault", tmpl.isDefault ? 1 : 0); query.bindValue(":updatedAt", QDateTime::currentDateTime()); if (!query.exec()) { qWarning() << "Failed to update template:" << query.lastError().text(); return false; } return query.numRowsAffected() > 0; } bool TemplateDao::remove(qint64 id) { QSqlDatabase db = DatabaseManager::instance().database(); QSqlQuery query(db); query.prepare("DELETE FROM Template WHERE id = :id"); query.bindValue(":id", id); if (!query.exec()) { qWarning() << "Failed to delete template:" << query.lastError().text(); return false; } return query.numRowsAffected() > 0; } std::optional