M module-db/Interface/SMSTemplateRecord.cpp => module-db/Interface/SMSTemplateRecord.cpp +9 -5
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "SMSTemplateRecord.hpp"
@@ 35,7 35,7 @@ uint32_t SMSTemplateRecordInterface::GetCount()
}
std::unique_ptr<std::vector<SMSTemplateRecord>> SMSTemplateRecordInterface::GetLimitOffsetByField(
- uint32_t offset, uint32_t limit, SMSTemplateRecordField field, const char *str)
+ uint32_t offset, uint32_t limit, SMSTemplateRecordField /*field*/, const char * /*str*/)
{
assert(0 && "need proper implementation");
return GetLimitOffset(offset, limit);
@@ 71,7 71,7 @@ bool SMSTemplateRecordInterface::RemoveByID(uint32_t id)
return smsDB->templates.removeById(id);
}
-bool SMSTemplateRecordInterface::RemoveByField(SMSTemplateRecordField field, const char *str)
+bool SMSTemplateRecordInterface::RemoveByField(SMSTemplateRecordField /*field*/, const char * /*str*/)
{
assert(0 && "need implementation");
return false;
@@ 172,8 172,12 @@ std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::getCountQuery(const
std::unique_ptr<db::QueryResult> SMSTemplateRecordInterface::addQuery(const std::shared_ptr<db::Query> &query)
{
const auto localQuery = static_cast<const db::query::SMSTemplateAdd *>(query.get());
- auto ret = SMSTemplateRecordInterface::Add(localQuery->rec);
- auto response = std::make_unique<db::query::SMSTemplateAddResult>(ret);
+ auto record = localQuery->rec;
+ auto ret = SMSTemplateRecordInterface::Add(record);
+ if (ret) {
+ record.ID = smsDB->templates.getLastId();
+ }
+ auto response = std::make_unique<db::query::SMSTemplateAddResult>(ret, record.ID);
response->setRequestQuery(query);
return response;
}
M module-db/Tables/SMSTemplateTable.cpp => module-db/Tables/SMSTemplateTable.cpp +10 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "SMSTemplateTable.hpp"
@@ 115,3 115,12 @@ uint32_t SMSTemplateTable::countByFieldId(const char *field, uint32_t id)
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();
+}
M module-db/Tables/SMSTemplateTable.hpp => module-db/Tables/SMSTemplateTable.hpp +2 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 41,4 41,5 @@ class SMSTemplateTable : public Table<SMSTemplateTableRow, SMSTemplateTableField
uint32_t count() override final;
uint32_t count(EntryState state);
uint32_t countByFieldId(const char *field, uint32_t id) override final;
+ uint32_t getLastId();
};
M module-db/queries/messages/templates/QuerySMSTemplateAdd.cpp => module-db/queries/messages/templates/QuerySMSTemplateAdd.cpp +3 -3
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "QuerySMSTemplateAdd.hpp"
@@ 8,10 8,10 @@
using namespace db::query;
-SMSTemplateAdd::SMSTemplateAdd(const SMSTemplateRecord &rec) : Query(Query::Type::Read), rec(std::move(rec))
+SMSTemplateAdd::SMSTemplateAdd(const SMSTemplateRecord &rec) : Query(Query::Type::Read), rec(rec)
{}
-SMSTemplateAddResult::SMSTemplateAddResult(bool result) : result(result)
+SMSTemplateAddResult::SMSTemplateAddResult(bool result, unsigned int id) : result(result), id(id)
{}
[[nodiscard]] auto SMSTemplateAdd::debugInfo() const -> std::string
M module-db/queries/messages/templates/QuerySMSTemplateAdd.hpp => module-db/queries/messages/templates/QuerySMSTemplateAdd.hpp +8 -3
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 16,7 16,7 @@ namespace db::query
class SMSTemplateAdd : public Query
{
public:
- SMSTemplateAdd(const SMSTemplateRecord &rec);
+ explicit SMSTemplateAdd(const SMSTemplateRecord &rec);
SMSTemplateRecord rec;
[[nodiscard]] auto debugInfo() const -> std::string override;
};
@@ 24,15 24,20 @@ namespace db::query
class SMSTemplateAddResult : public QueryResult
{
public:
- SMSTemplateAddResult(bool result);
+ SMSTemplateAddResult(bool result, unsigned int id);
auto getResult() -> bool
{
return result;
}
+ [[nodiscard]] auto getID() const noexcept -> unsigned int
+ {
+ return id;
+ }
[[nodiscard]] auto debugInfo() const -> std::string override;
private:
bool result;
+ unsigned int id;
};
}; // namespace db::query
M module-db/tests/SMSTemplateTable_tests.cpp => module-db/tests/SMSTemplateTable_tests.cpp +17 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <catch2/catch.hpp>
@@ 87,6 87,22 @@ TEST_CASE("SMS Templates Table tests")
REQUIRE(retOffsetLimitFailed.size() == 0);
}
+ SECTION("Get last ID")
+ {
+ REQUIRE(templatesTbl.getLastId() == 4);
+ REQUIRE(templatesTbl.add(testRow));
+ REQUIRE(templatesTbl.getLastId() == 5);
+ REQUIRE(templatesTbl.removeById(5));
+ REQUIRE(templatesTbl.getLastId() == 4);
+ REQUIRE(templatesTbl.add(testRow));
+ REQUIRE(templatesTbl.getLastId() == 5);
+ REQUIRE(templatesTbl.add(testRow));
+ REQUIRE(templatesTbl.getLastId() == 6);
+ REQUIRE(templatesTbl.removeById(5));
+ REQUIRE(templatesTbl.add(testRow));
+ REQUIRE(templatesTbl.getLastId() == 7);
+ }
+
SECTION("Remove entries")
{
REQUIRE(templatesTbl.removeById(2));
M products/PurePhone/services/desktop/endpoints/messages/MessageHelper.cpp => products/PurePhone/services/desktop/endpoints/messages/MessageHelper.cpp +3 -2
@@ 314,8 314,9 @@ namespace sdesktop::endpoints
auto listener = std::make_unique<db::EndpointListener>(
[=](db::QueryResult *result, Context context) {
if (auto smsTemplateResult = dynamic_cast<db::query::SMSTemplateAddResult *>(result)) {
-
- context.setResponseStatus(smsTemplateResult->getResult() ? http::Code::NoContent
+ context.setResponseBody(json11::Json::object{
+ {json::messages::templateID, static_cast<int>(smsTemplateResult->getID())}});
+ context.setResponseStatus(smsTemplateResult->getResult() ? http::Code::OK
: http::Code::InternalServerError);
putToSendQueue(context.createSimpleResponse());
return true;
M test/harness => test/harness +1 -1
@@ 1,1 1,1 @@
-Subproject commit 7d219c6ee72d0207880a9e13fdd0c59892db9612
+Subproject commit 12a9af331fdbabadb0425016c40a6ba0eb349c92
M test/pytest/service-desktop/test_templates.py => test/pytest/service-desktop/test_templates.py +3 -2
@@ 1,4 1,4 @@
-# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+# Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
import pytest
from harness.interface.defs import status
@@ 19,7 19,8 @@ class TemplatesTester:
def __add_template(self):
body = {"category": "template", "templateBody": self.template_body}
ret = self.harness.endpoint_request("messages", "post", body)
- assert ret["status"] == status["NoContent"]
+ assert ret["status"] == status["OK"]
+ assert type(ret["body"]["templateID"]) == int
return ret
def __get_templates(self, limit, offset):