~aleteoryx/muditaos

291b695282fe87332bc016380c8589fa7deddfee — Pawel Olejniczak 3 years ago a89d700
[CP-1334] Return templateID after adding new one

No information about newly added message template
was returned. Now temaplateID helps to identify
newly added record.
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):