From 6bcd1eea8160b66df4b701e66e1002f873234d8d Mon Sep 17 00:00:00 2001 From: Cyril Jacquet Date: Sat, 28 Sep 2024 19:35:04 +0200 Subject: [PATCH] rename repositories' removeInCascade to remove --- CMakeLists.txt | 2 +- README.md | 3 + examples/front_ends/CMakeLists.txt | 2 +- .../commands/create_brand_command_handler.cpp | 64 ++-- .../commands/create_brand_command_handler.h | 6 +- .../commands/remove_brand_command_handler.cpp | 31 +- .../commands/create_car_command_handler.cpp | 44 +-- .../car/commands/create_car_command_handler.h | 6 +- .../commands/remove_car_command_handler.cpp | 28 +- .../create_client_command_handler.cpp | 50 ++- .../commands/create_client_command_handler.h | 6 +- .../remove_client_command_handler.cpp | 31 +- .../create_passenger_command_handler.cpp | 74 ++--- .../create_passenger_command_handler.h | 6 +- .../remove_passenger_command_handler.cpp | 28 +- .../repository/interface_brand_repository.h | 6 +- .../repository/interface_car_repository.h | 8 +- .../repository/interface_client_repository.h | 8 +- .../interface_passenger_repository.h | 6 +- .../repository/brand_repository.cpp | 22 +- .../persistence/repository/brand_repository.h | 15 +- .../persistence/repository/car_repository.cpp | 182 ++++------- .../persistence/repository/car_repository.h | 15 +- .../repository/client_repository.cpp | 187 +++++------ .../repository/client_repository.h | 18 +- .../repository/passenger_repository.cpp | 22 +- .../repository/passenger_repository.h | 15 +- .../commands/create_brand_command_handler.cpp | 4 +- .../commands/remove_brand_command_handler.cpp | 2 +- .../commands/create_car_command_handler.cpp | 4 +- .../commands/remove_car_command_handler.cpp | 2 +- .../create_client_command_handler.cpp | 4 +- .../remove_client_command_handler.cpp | 2 +- .../create_passenger_command_handler.cpp | 4 +- .../remove_passenger_command_handler.cpp | 2 +- .../simple/src/core/contracts/CMakeLists.txt | 10 +- .../repository/interface_brand_repository.h | 5 +- .../repository/interface_car_repository.h | 7 +- .../repository/interface_client_repository.h | 7 +- .../interface_passenger_repository.h | 5 +- .../persistence/persistence_registration.cpp | 9 +- .../repository/brand_repository.cpp | 24 +- .../persistence/repository/brand_repository.h | 5 +- .../persistence/repository/car_repository.cpp | 64 ++-- .../persistence/repository/car_repository.h | 5 +- .../repository/client_repository.cpp | 64 ++-- .../repository/client_repository.h | 5 +- .../repository/passenger_repository.cpp | 25 +- .../repository/passenger_repository.h | 5 +- include/qleany/common/error.h | 4 +- .../repository/interface_generic_repository.h | 2 - .../qleany/database/database_table_group.h | 9 +- .../many_to_many_unordered_associator.h | 250 +++++++++++++++ .../database/one_to_many_ordered_associator.h | 12 +- .../one_to_many_unordered_associator.h | 21 +- .../qleany/database/one_to_one_associator.h | 12 +- .../qleany/repository/generic_repository.h | 15 - .../qleany/generator/temp/manifest_temp.yaml | 294 +++++++++--------- .../CRUD/create_handler.cpp.jinja2 | 4 +- .../CRUD/remove_handler.cpp.jinja2 | 2 +- .../interface_repository_template.h.jinja2 | 4 +- .../repository_template.cpp.jinja2 | 32 +- .../repositories/repository_template.h.jinja2 | 4 +- .../templates/root/CMakeLists.txt.jinja2 | 2 +- .../root/kf6_kirigami/CMakeLists.txt.jinja2 | 2 +- 65 files changed, 930 insertions(+), 888 deletions(-) create mode 100755 include/qleany/database/many_to_many_unordered_associator.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 644bc30a..dd7346f0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,7 +160,7 @@ install(FILES LICENSE DESTINATION share/qleany) install( EXPORT qleanyTargets FILE qleanyTargets.cmake - DESTINATION lib/cmake/qleany) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/qleany) # Create and install qleanyConfig.cmake message(STATUS "Creating and installing qleanyConfig.cmake") diff --git a/README.md b/README.md index f1486175..393c43aa 100755 --- a/README.md +++ b/README.md @@ -125,6 +125,9 @@ Prerequisites: - QCoro (dev packages) - Cmake and extra-cmake-modules +On Debian-based distribution, it would be packages like: qtbase6-dev qcoro-qt6-dev cmake extra-cmake-modules cmake-extras +Depending of your options: qt6-declarative-dev qt6-svg-dev libkf6*dev kirigami2-dev + Adapt the -j6 to your number of CPU minus one. CMake options are: diff --git a/examples/front_ends/CMakeLists.txt b/examples/front_ends/CMakeLists.txt index 0e6358be..78ec233d 100644 --- a/examples/front_ends/CMakeLists.txt +++ b/examples/front_ends/CMakeLists.txt @@ -95,7 +95,7 @@ if(BUILD_KF6_KIRIGAMI OR BUILD_QT_QUICK) endif() if(BUILD_KF6_KIRIGAMI) - find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 CoreAddons + find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami CoreAddons Config I18n) if(ANDROID) diff --git a/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp b/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp index c6fdbe39..f63c0e91 100644 --- a/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp +++ b/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp @@ -13,26 +13,22 @@ using namespace FrontEnds::Contracts::Repository; using namespace FrontEnds::Contracts::CQRS::Brand::Validators; using namespace FrontEnds::Application::Features::Brand::Commands; -CreateBrandCommandHandler::CreateBrandCommandHandler(InterfaceBrandRepository *repository) : m_repository(repository) +CreateBrandCommandHandler::CreateBrandCommandHandler(InterfaceBrandRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result CreateBrandCommandHandler::handle(QPromise> &progressPromise, - const CreateBrandCommand &request) +Result CreateBrandCommandHandler::handle(QPromise> &progressPromise, const CreateBrandCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateBrandCommand:" << ex.what(); } @@ -44,20 +40,16 @@ Result CreateBrandCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateBrandCommand restore:" << ex.what(); } return result; } -Result CreateBrandCommandHandler::handleImpl(QPromise> &progressPromise, - const CreateBrandCommand &request) +Result CreateBrandCommandHandler::handleImpl(QPromise> &progressPromise, const CreateBrandCommand &request) { qDebug() << "CreateBrandCommandHandler::handleImpl called"; FrontEnds::Entities::Brand brand; @@ -69,8 +61,7 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p int ownerId = createDTO.carId(); m_ownerId = ownerId; - if (m_firstPass) - { + if (m_firstPass) { // Validate the create Brand command using the validator auto validator = CreateBrandCommandValidator(m_repository); Result validatorResult = validator.validate(createDTO); @@ -82,17 +73,15 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p brand = Qleany::Tools::AutoMapper::AutoMapper::map(createDTO); // allow for forcing the uuid - if (brand.uuid().isNull()) - { + if (brand.uuid().isNull()) { brand.setUuid(QUuid::createUuid()); } // Set the creation and update timestamps to the current date and time brand.setCreationDate(QDateTime::currentDateTime()); brand.setUpdateDate(QDateTime::currentDateTime()); - } - else - { + + } else { brand = m_newEntity.value(); } @@ -112,12 +101,9 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p int position = -1; - if (m_firstPass) - { - + if (m_firstPass) { auto originalOwnerBrandResult = m_repository->getEntityInRelationOf(Car::schema, ownerId, "brand"_L1); - if (Q_UNLIKELY(originalOwnerBrandResult.hasError())) - { + if (Q_UNLIKELY(originalOwnerBrandResult.hasError())) { return Result(originalOwnerBrandResult.error()); } auto originalOwnerBrand = originalOwnerBrandResult.value(); @@ -128,16 +114,13 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p m_ownerBrandNewState = originalOwnerBrand; ownerEntityBrand = originalOwnerBrand; - } - else - { + } else { ownerEntityBrand = m_ownerBrandNewState; position = m_position; } // Add the brand to the owner entity - Result updateResult = - m_repository->updateEntityInRelationOf(Car::schema, ownerId, "brand"_L1, ownerEntityBrand); + Result updateResult = m_repository->updateEntityInRelationOf(Car::schema, ownerId, "brand"_L1, ownerEntityBrand); QLN_RETURN_IF_ERROR_WITH_ACTION(BrandDTO, updateResult, m_repository->cancelChanges();) @@ -145,8 +128,7 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p m_newEntity = brandResult; - auto brandDTO = - Qleany::Tools::AutoMapper::AutoMapper::map(brandResult.value()); + auto brandDTO = Qleany::Tools::AutoMapper::AutoMapper::map(brandResult.value()); Q_EMIT brandCreated(brandDTO); // send an insertion signal @@ -163,11 +145,11 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p Result CreateBrandCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(BrandDTO, deleteResult) - Q_EMIT brandRemoved(deleteResult.value()); + Q_EMIT brandRemoved(deleteResult.value().value(FrontEnds::Entities::Entities::EntityEnum::Brand).first()); qDebug() << "Brand removed:" << deleteResult.value(); @@ -180,8 +162,6 @@ bool CreateBrandCommandHandler::s_mappingRegistered = false; void CreateBrandCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping( - true, true); - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.h b/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.h index 00aeb5fc..d4463fbd 100644 --- a/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.h +++ b/examples/front_ends/src/core/application/brand_feature/brand/commands/create_brand_command_handler.h @@ -20,20 +20,20 @@ namespace FrontEnds::Application::Features::Brand::Commands class FRONT_ENDS_EXAMPLE_APPLICATION_BRAND_EXPORT CreateBrandCommandHandler : public QObject { Q_OBJECT - public: +public: CreateBrandCommandHandler(InterfaceBrandRepository *repository); Result handle(QPromise> &progressPromise, const CreateBrandCommand &request); Result restore(); - Q_SIGNALS: +Q_SIGNALS: void brandCreated(FrontEnds::Contracts::DTO::Brand::BrandDTO brandDto); void brandRemoved(int id); void relationWithOwnerInserted(int id, int ownerId, int position); void relationWithOwnerRemoved(int id, int ownerId); - private: +private: InterfaceBrandRepository *m_repository; Result handleImpl(QPromise> &progressPromise, const CreateBrandCommand &request); Result restoreImpl(); diff --git a/examples/front_ends/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp b/examples/front_ends/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp index 8ea2c674..f02b668c 100644 --- a/examples/front_ends/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp +++ b/examples/front_ends/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp @@ -12,26 +12,22 @@ using namespace FrontEnds::Contracts::CQRS::Brand::Commands; using namespace FrontEnds::Application::Features::Brand::Commands; using namespace FrontEnds::Contracts::CQRS::Brand::Validators; -RemoveBrandCommandHandler::RemoveBrandCommandHandler(InterfaceBrandRepository *repository) : m_repository(repository) +RemoveBrandCommandHandler::RemoveBrandCommandHandler(InterfaceBrandRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result RemoveBrandCommandHandler::handle(QPromise> &progressPromise, - const RemoveBrandCommand &request) +Result RemoveBrandCommandHandler::handle(QPromise> &progressPromise, const RemoveBrandCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveBrandCommand:" << ex.what(); } @@ -43,20 +39,16 @@ Result RemoveBrandCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveBrandCommand restore:" << ex.what(); } return result; } -Result RemoveBrandCommandHandler::handleImpl(QPromise> &progressPromise, - const RemoveBrandCommand &request) +Result RemoveBrandCommandHandler::handleImpl(QPromise> &progressPromise, const RemoveBrandCommand &request) { int brandId = request.id; @@ -73,7 +65,7 @@ Result RemoveBrandCommandHandler::handleImpl(QPromise> &progre // save old entity m_oldState = brandResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << brandId); + auto deleteResult = m_repository->remove(QList() << brandId); QLN_RETURN_IF_ERROR(int, deleteResult) @@ -95,6 +87,5 @@ bool RemoveBrandCommandHandler::s_mappingRegistered = false; void RemoveBrandCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping( - true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.cpp b/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.cpp index 8ca8bde1..95f992ea 100644 --- a/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.cpp +++ b/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.cpp @@ -11,10 +11,10 @@ using namespace FrontEnds::Contracts::Repository; using namespace FrontEnds::Contracts::CQRS::Car::Validators; using namespace FrontEnds::Application::Features::Car::Commands; -CreateCarCommandHandler::CreateCarCommandHandler(InterfaceCarRepository *repository) : m_repository(repository) +CreateCarCommandHandler::CreateCarCommandHandler(InterfaceCarRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } @@ -24,12 +24,9 @@ Result CreateCarCommandHandler::handle(QPromise> &progressP { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateCarCommand:" << ex.what(); } @@ -41,27 +38,22 @@ Result CreateCarCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateCarCommand restore:" << ex.what(); } return result; } -Result CreateCarCommandHandler::handleImpl(QPromise> &progressPromise, - const CreateCarCommand &request) +Result CreateCarCommandHandler::handleImpl(QPromise> &progressPromise, const CreateCarCommand &request) { qDebug() << "CreateCarCommandHandler::handleImpl called"; FrontEnds::Entities::Car car; CreateCarDTO createDTO = request.req; - if (m_firstPass) - { + if (m_firstPass) { // Validate the create Car command using the validator auto validator = CreateCarCommandValidator(m_repository); Result validatorResult = validator.validate(createDTO); @@ -73,17 +65,15 @@ Result CreateCarCommandHandler::handleImpl(QPromise> &progr car = Qleany::Tools::AutoMapper::AutoMapper::map(createDTO); // allow for forcing the uuid - if (car.uuid().isNull()) - { + if (car.uuid().isNull()) { car.setUuid(QUuid::createUuid()); } // Set the creation and update timestamps to the current date and time car.setCreationDate(QDateTime::currentDateTime()); car.setUpdateDate(QDateTime::currentDateTime()); - } - else - { + + } else { car = m_newEntity.value(); } @@ -119,11 +109,11 @@ Result CreateCarCommandHandler::handleImpl(QPromise> &progr Result CreateCarCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(CarDTO, deleteResult) - Q_EMIT carRemoved(deleteResult.value()); + Q_EMIT carRemoved(deleteResult.value().value(FrontEnds::Entities::Entities::EntityEnum::Car).first()); qDebug() << "Car removed:" << deleteResult.value(); @@ -134,8 +124,6 @@ bool CreateCarCommandHandler::s_mappingRegistered = false; void CreateCarCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, - true); - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.h b/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.h index ce27be4b..9df3ee43 100644 --- a/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.h +++ b/examples/front_ends/src/core/application/car_feature/car/commands/create_car_command_handler.h @@ -20,17 +20,17 @@ namespace FrontEnds::Application::Features::Car::Commands class FRONT_ENDS_EXAMPLE_APPLICATION_CAR_EXPORT CreateCarCommandHandler : public QObject { Q_OBJECT - public: +public: CreateCarCommandHandler(InterfaceCarRepository *repository); Result handle(QPromise> &progressPromise, const CreateCarCommand &request); Result restore(); - Q_SIGNALS: +Q_SIGNALS: void carCreated(FrontEnds::Contracts::DTO::Car::CarDTO carDto); void carRemoved(int id); - private: +private: InterfaceCarRepository *m_repository; Result handleImpl(QPromise> &progressPromise, const CreateCarCommand &request); Result restoreImpl(); diff --git a/examples/front_ends/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp b/examples/front_ends/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp index 6db2351d..7ec61c33 100644 --- a/examples/front_ends/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp +++ b/examples/front_ends/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp @@ -12,10 +12,10 @@ using namespace FrontEnds::Contracts::CQRS::Car::Commands; using namespace FrontEnds::Application::Features::Car::Commands; using namespace FrontEnds::Contracts::CQRS::Car::Validators; -RemoveCarCommandHandler::RemoveCarCommandHandler(InterfaceCarRepository *repository) : m_repository(repository) +RemoveCarCommandHandler::RemoveCarCommandHandler(InterfaceCarRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } @@ -25,12 +25,9 @@ Result RemoveCarCommandHandler::handle(QPromise> &progressProm { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveCarCommand:" << ex.what(); } @@ -42,20 +39,16 @@ Result RemoveCarCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveCarCommand restore:" << ex.what(); } return result; } -Result RemoveCarCommandHandler::handleImpl(QPromise> &progressPromise, - const RemoveCarCommand &request) +Result RemoveCarCommandHandler::handleImpl(QPromise> &progressPromise, const RemoveCarCommand &request) { int carId = request.id; @@ -72,7 +65,7 @@ Result RemoveCarCommandHandler::handleImpl(QPromise> &progress // save old entity m_oldState = carResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << carId); + auto deleteResult = m_repository->remove(QList() << carId); QLN_RETURN_IF_ERROR(int, deleteResult) @@ -94,6 +87,5 @@ bool RemoveCarCommandHandler::s_mappingRegistered = false; void RemoveCarCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, - true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.cpp b/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.cpp index 4f26ef68..f45bd216 100644 --- a/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.cpp +++ b/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.cpp @@ -11,26 +11,22 @@ using namespace FrontEnds::Contracts::Repository; using namespace FrontEnds::Contracts::CQRS::Client::Validators; using namespace FrontEnds::Application::Features::Client::Commands; -CreateClientCommandHandler::CreateClientCommandHandler(InterfaceClientRepository *repository) : m_repository(repository) +CreateClientCommandHandler::CreateClientCommandHandler(InterfaceClientRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result CreateClientCommandHandler::handle(QPromise> &progressPromise, - const CreateClientCommand &request) +Result CreateClientCommandHandler::handle(QPromise> &progressPromise, const CreateClientCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateClientCommand:" << ex.what(); } @@ -42,27 +38,22 @@ Result CreateClientCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreateClientCommand restore:" << ex.what(); } return result; } -Result CreateClientCommandHandler::handleImpl(QPromise> &progressPromise, - const CreateClientCommand &request) +Result CreateClientCommandHandler::handleImpl(QPromise> &progressPromise, const CreateClientCommand &request) { qDebug() << "CreateClientCommandHandler::handleImpl called"; FrontEnds::Entities::Client client; CreateClientDTO createDTO = request.req; - if (m_firstPass) - { + if (m_firstPass) { // Validate the create Client command using the validator auto validator = CreateClientCommandValidator(m_repository); Result validatorResult = validator.validate(createDTO); @@ -74,17 +65,15 @@ Result CreateClientCommandHandler::handleImpl(QPromise> client = Qleany::Tools::AutoMapper::AutoMapper::map(createDTO); // allow for forcing the uuid - if (client.uuid().isNull()) - { + if (client.uuid().isNull()) { client.setUuid(QUuid::createUuid()); } // Set the creation and update timestamps to the current date and time client.setCreationDate(QDateTime::currentDateTime()); client.setUpdateDate(QDateTime::currentDateTime()); - } - else - { + + } else { client = m_newEntity.value(); } @@ -106,8 +95,7 @@ Result CreateClientCommandHandler::handleImpl(QPromise> m_newEntity = clientResult; - auto clientDTO = - Qleany::Tools::AutoMapper::AutoMapper::map(clientResult.value()); + auto clientDTO = Qleany::Tools::AutoMapper::AutoMapper::map(clientResult.value()); Q_EMIT clientCreated(clientDTO); qDebug() << "Client added:" << clientDTO.id(); @@ -121,11 +109,11 @@ Result CreateClientCommandHandler::handleImpl(QPromise> Result CreateClientCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(ClientDTO, deleteResult) - Q_EMIT clientRemoved(deleteResult.value()); + Q_EMIT clientRemoved(deleteResult.value().value(FrontEnds::Entities::Entities::EntityEnum::Client).first()); qDebug() << "Client removed:" << deleteResult.value(); @@ -136,8 +124,6 @@ bool CreateClientCommandHandler::s_mappingRegistered = false; void CreateClientCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.h b/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.h index 6da59512..6aea78e8 100644 --- a/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.h +++ b/examples/front_ends/src/core/application/client_feature/client/commands/create_client_command_handler.h @@ -20,17 +20,17 @@ namespace FrontEnds::Application::Features::Client::Commands class FRONT_ENDS_EXAMPLE_APPLICATION_CLIENT_EXPORT CreateClientCommandHandler : public QObject { Q_OBJECT - public: +public: CreateClientCommandHandler(InterfaceClientRepository *repository); Result handle(QPromise> &progressPromise, const CreateClientCommand &request); Result restore(); - Q_SIGNALS: +Q_SIGNALS: void clientCreated(FrontEnds::Contracts::DTO::Client::ClientDTO clientDto); void clientRemoved(int id); - private: +private: InterfaceClientRepository *m_repository; Result handleImpl(QPromise> &progressPromise, const CreateClientCommand &request); Result restoreImpl(); diff --git a/examples/front_ends/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp b/examples/front_ends/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp index cedc9677..49174847 100644 --- a/examples/front_ends/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp +++ b/examples/front_ends/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp @@ -12,26 +12,22 @@ using namespace FrontEnds::Contracts::CQRS::Client::Commands; using namespace FrontEnds::Application::Features::Client::Commands; using namespace FrontEnds::Contracts::CQRS::Client::Validators; -RemoveClientCommandHandler::RemoveClientCommandHandler(InterfaceClientRepository *repository) : m_repository(repository) +RemoveClientCommandHandler::RemoveClientCommandHandler(InterfaceClientRepository *repository) + : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result RemoveClientCommandHandler::handle(QPromise> &progressPromise, - const RemoveClientCommand &request) +Result RemoveClientCommandHandler::handle(QPromise> &progressPromise, const RemoveClientCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveClientCommand:" << ex.what(); } @@ -43,20 +39,16 @@ Result RemoveClientCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemoveClientCommand restore:" << ex.what(); } return result; } -Result RemoveClientCommandHandler::handleImpl(QPromise> &progressPromise, - const RemoveClientCommand &request) +Result RemoveClientCommandHandler::handleImpl(QPromise> &progressPromise, const RemoveClientCommand &request) { int clientId = request.id; @@ -73,7 +65,7 @@ Result RemoveClientCommandHandler::handleImpl(QPromise> &progr // save old entity m_oldState = clientResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << clientId); + auto deleteResult = m_repository->remove(QList() << clientId); QLN_RETURN_IF_ERROR(int, deleteResult) @@ -95,6 +87,5 @@ bool RemoveClientCommandHandler::s_mappingRegistered = false; void RemoveClientCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp index 1cd8b2c9..4165318e 100644 --- a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp +++ b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp @@ -16,24 +16,19 @@ using namespace FrontEnds::Application::Features::Passenger::Commands; CreatePassengerCommandHandler::CreatePassengerCommandHandler(InterfacePassengerRepository *repository) : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result CreatePassengerCommandHandler::handle(QPromise> &progressPromise, - const CreatePassengerCommand &request) +Result CreatePassengerCommandHandler::handle(QPromise> &progressPromise, const CreatePassengerCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreatePassengerCommand:" << ex.what(); } @@ -45,20 +40,16 @@ Result CreatePassengerCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling CreatePassengerCommand restore:" << ex.what(); } return result; } -Result CreatePassengerCommandHandler::handleImpl(QPromise> &progressPromise, - const CreatePassengerCommand &request) +Result CreatePassengerCommandHandler::handleImpl(QPromise> &progressPromise, const CreatePassengerCommand &request) { qDebug() << "CreatePassengerCommandHandler::handleImpl called"; FrontEnds::Entities::Passenger passenger; @@ -70,8 +61,7 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise validatorResult = validator.validate(createDTO); @@ -80,21 +70,18 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise(createDTO); + passenger = Qleany::Tools::AutoMapper::AutoMapper::map(createDTO); // allow for forcing the uuid - if (passenger.uuid().isNull()) - { + if (passenger.uuid().isNull()) { passenger.setUuid(QUuid::createUuid()); } // Set the creation and update timestamps to the current date and time passenger.setCreationDate(QDateTime::currentDateTime()); passenger.setUpdateDate(QDateTime::currentDateTime()); - } - else - { + + } else { passenger = m_newEntity.value(); } @@ -114,13 +101,9 @@ Result CreatePassengerCommandHandler::handleImpl(QPromisegetEntitiesInRelationOf(Car::schema, ownerId, "passengers"_L1); - if (Q_UNLIKELY(originalOwnerPassengersResult.hasError())) - { + if (m_firstPass) { + auto originalOwnerPassengersResult = m_repository->getEntitiesInRelationOf(Car::schema, ownerId, "passengers"_L1); + if (Q_UNLIKELY(originalOwnerPassengersResult.hasError())) { return Result(originalOwnerPassengersResult.error()); } auto originalOwnerPassengers = originalOwnerPassengersResult.value(); @@ -131,16 +114,12 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise originalOwnerPassengers.count()) - { + if (position > originalOwnerPassengers.count()) { position = originalOwnerPassengers.count(); - } - else if (position < 0) - { + } else if (position < 0) { position = 0; } @@ -150,9 +129,7 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise CreatePassengerCommandHandler::handleImpl(QPromise( - passengerResult.value()); + auto passengerDTO = Qleany::Tools::AutoMapper::AutoMapper::map(passengerResult.value()); Q_EMIT passengerCreated(passengerDTO); // send an insertion signal @@ -185,11 +161,11 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise CreatePassengerCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(PassengerDTO, deleteResult) - Q_EMIT passengerRemoved(deleteResult.value()); + Q_EMIT passengerRemoved(deleteResult.value().value(FrontEnds::Entities::Entities::EntityEnum::Passenger).first()); qDebug() << "Passenger removed:" << deleteResult.value(); @@ -202,8 +178,6 @@ bool CreatePassengerCommandHandler::s_mappingRegistered = false; void CreatePassengerCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(); } \ No newline at end of file diff --git a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.h b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.h index 1ffe229f..3b2323c6 100644 --- a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.h +++ b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.h @@ -20,20 +20,20 @@ namespace FrontEnds::Application::Features::Passenger::Commands class FRONT_ENDS_EXAMPLE_APPLICATION_PASSENGER_EXPORT CreatePassengerCommandHandler : public QObject { Q_OBJECT - public: +public: CreatePassengerCommandHandler(InterfacePassengerRepository *repository); Result handle(QPromise> &progressPromise, const CreatePassengerCommand &request); Result restore(); - Q_SIGNALS: +Q_SIGNALS: void passengerCreated(FrontEnds::Contracts::DTO::Passenger::PassengerDTO passengerDto); void passengerRemoved(int id); void relationWithOwnerInserted(int id, int ownerId, int position); void relationWithOwnerRemoved(int id, int ownerId); - private: +private: InterfacePassengerRepository *m_repository; Result handleImpl(QPromise> &progressPromise, const CreatePassengerCommand &request); Result restoreImpl(); diff --git a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp index 99c88e0b..c567d36c 100644 --- a/examples/front_ends/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp +++ b/examples/front_ends/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp @@ -15,24 +15,19 @@ using namespace FrontEnds::Contracts::CQRS::Passenger::Validators; RemovePassengerCommandHandler::RemovePassengerCommandHandler(InterfacePassengerRepository *repository) : m_repository(repository) { - if (!s_mappingRegistered) - { + if (!s_mappingRegistered) { registerMappings(); s_mappingRegistered = true; } } -Result RemovePassengerCommandHandler::handle(QPromise> &progressPromise, - const RemovePassengerCommand &request) +Result RemovePassengerCommandHandler::handle(QPromise> &progressPromise, const RemovePassengerCommand &request) { Result result; - try - { + try { result = handleImpl(progressPromise, request); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemovePassengerCommand:" << ex.what(); } @@ -44,20 +39,16 @@ Result RemovePassengerCommandHandler::restore() { Result result; - try - { + try { result = restoreImpl(); - } - catch (const std::exception &ex) - { + } catch (const std::exception &ex) { result = Result(QLN_ERROR_2(Q_FUNC_INFO, Error::Critical, "Unknown error", ex.what())); qDebug() << "Error handling RemovePassengerCommand restore:" << ex.what(); } return result; } -Result RemovePassengerCommandHandler::handleImpl(QPromise> &progressPromise, - const RemovePassengerCommand &request) +Result RemovePassengerCommandHandler::handleImpl(QPromise> &progressPromise, const RemovePassengerCommand &request) { int passengerId = request.id; @@ -74,7 +65,7 @@ Result RemovePassengerCommandHandler::handleImpl(QPromise> &pr // save old entity m_oldState = passengerResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << passengerId); + auto deleteResult = m_repository->remove(QList() << passengerId); QLN_RETURN_IF_ERROR(int, deleteResult) @@ -96,6 +87,5 @@ bool RemovePassengerCommandHandler::s_mappingRegistered = false; void RemovePassengerCommandHandler::registerMappings() { - Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); + Qleany::Tools::AutoMapper::AutoMapper::registerMapping(true, true); } \ No newline at end of file diff --git a/examples/front_ends/src/core/contracts/repository/interface_brand_repository.h b/examples/front_ends/src/core/contracts/repository/interface_brand_repository.h index 42399614..3ddccf69 100644 --- a/examples/front_ends/src/core/contracts/repository/interface_brand_repository.h +++ b/examples/front_ends/src/core/contracts/repository/interface_brand_repository.h @@ -18,12 +18,12 @@ class FRONT_ENDS_EXAMPLE_CONTRACTS_EXPORT InterfaceBrandRepository : public virtual Qleany::Contracts::Repository::InterfaceGenericRepository, public Qleany::Contracts::Repository::InterfaceRepository { - public: +public: virtual ~InterfaceBrandRepository() { } - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; }; } // namespace FrontEnds::Contracts::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/contracts/repository/interface_car_repository.h b/examples/front_ends/src/core/contracts/repository/interface_car_repository.h index 540aeba2..7d5cf72d 100644 --- a/examples/front_ends/src/core/contracts/repository/interface_car_repository.h +++ b/examples/front_ends/src/core/contracts/repository/interface_car_repository.h @@ -18,19 +18,19 @@ class FRONT_ENDS_EXAMPLE_CONTRACTS_EXPORT InterfaceCarRepository : public virtual Qleany::Contracts::Repository::InterfaceGenericRepository, public Qleany::Contracts::Repository::InterfaceRepository { - public: +public: virtual ~InterfaceCarRepository() { } - virtual Result update(FrontEnds::Entities::Car &&entity) = 0; + virtual Result update(FrontEnds::Entities::Car &&entity) override = 0; virtual Result getWithDetails(int entityId) = 0; virtual FrontEnds::Entities::Car::BrandLoader fetchBrandLoader() = 0; virtual FrontEnds::Entities::Car::PassengersLoader fetchPassengersLoader() = 0; - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; }; } // namespace FrontEnds::Contracts::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/contracts/repository/interface_client_repository.h b/examples/front_ends/src/core/contracts/repository/interface_client_repository.h index 9e42ab53..56fda1cd 100644 --- a/examples/front_ends/src/core/contracts/repository/interface_client_repository.h +++ b/examples/front_ends/src/core/contracts/repository/interface_client_repository.h @@ -18,19 +18,19 @@ class FRONT_ENDS_EXAMPLE_CONTRACTS_EXPORT InterfaceClientRepository : public virtual Qleany::Contracts::Repository::InterfaceGenericRepository, public Qleany::Contracts::Repository::InterfaceRepository { - public: +public: virtual ~InterfaceClientRepository() { } - virtual Result update(FrontEnds::Entities::Client &&entity) = 0; + virtual Result update(FrontEnds::Entities::Client &&entity) override = 0; virtual Result getWithDetails(int entityId) = 0; virtual FrontEnds::Entities::Client::ClientLoader fetchClientLoader() = 0; virtual FrontEnds::Entities::Client::ClientFriendsLoader fetchClientFriendsLoader() = 0; - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; }; } // namespace FrontEnds::Contracts::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/contracts/repository/interface_passenger_repository.h b/examples/front_ends/src/core/contracts/repository/interface_passenger_repository.h index ff5733aa..9eb96297 100644 --- a/examples/front_ends/src/core/contracts/repository/interface_passenger_repository.h +++ b/examples/front_ends/src/core/contracts/repository/interface_passenger_repository.h @@ -18,12 +18,12 @@ class FRONT_ENDS_EXAMPLE_CONTRACTS_EXPORT InterfacePassengerRepository : public virtual Qleany::Contracts::Repository::InterfaceGenericRepository, public Qleany::Contracts::Repository::InterfaceRepository { - public: +public: virtual ~InterfacePassengerRepository() { } - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; }; } // namespace FrontEnds::Contracts::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/brand_repository.cpp b/examples/front_ends/src/core/persistence/repository/brand_repository.cpp index c8a8f4c0..8ede37c7 100644 --- a/examples/front_ends/src/core/persistence/repository/brand_repository.cpp +++ b/examples/front_ends/src/core/persistence/repository/brand_repository.cpp @@ -23,38 +23,38 @@ SignalHolder *BrandRepository::signalHolder() return m_signalHolder.data(); } -Result>> BrandRepository::removeInCascade(QList ids) +Result>> BrandRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::Brand, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Brand, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> BrandRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> BrandRepository::changeActiveStatusInCascade(QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // finally change the entites of this repository Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::Brand, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Brand, changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/brand_repository.h b/examples/front_ends/src/core/persistence/repository/brand_repository.h index 06f97d54..a7812a69 100644 --- a/examples/front_ends/src/core/persistence/repository/brand_repository.h +++ b/examples/front_ends/src/core/persistence/repository/brand_repository.h @@ -17,21 +17,20 @@ using namespace Qleany::Contracts::Database; namespace FrontEnds::Persistence::Repository { -class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT BrandRepository final - : public Qleany::Repository::GenericRepository, - public FrontEnds::Contracts::Repository::InterfaceBrandRepository +class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT BrandRepository final : public Qleany::Repository::GenericRepository, + public FrontEnds::Contracts::Repository::InterfaceBrandRepository { - public: +public: explicit BrandRepository(InterfaceDatabaseTableGroup *brandDatabase); SignalHolder *signalHolder() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, bool active) override; - private: +private: QScopedPointer m_signalHolder; QReadWriteLock m_lock; }; -} // namespace FrontEnds::Persistence::Repository \ No newline at end of file +} // namespace FrontEnds::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/car_repository.cpp b/examples/front_ends/src/core/persistence/repository/car_repository.cpp index 455007bd..d51c752b 100644 --- a/examples/front_ends/src/core/persistence/repository/car_repository.cpp +++ b/examples/front_ends/src/core/persistence/repository/car_repository.cpp @@ -14,8 +14,9 @@ using namespace FrontEnds::Contracts::Repository; CarRepository::CarRepository(InterfaceDatabaseTableGroup *carDatabase, InterfaceBrandRepository *brandRepository, InterfacePassengerRepository *passengerRepository) - : Qleany::Repository::GenericRepository(carDatabase), m_brandRepository(brandRepository), - m_passengerRepository(passengerRepository) + : Qleany::Repository::GenericRepository(carDatabase) + , m_brandRepository(brandRepository) + , m_passengerRepository(passengerRepository) { m_signalHolder.reset(new SignalHolder(nullptr)); } @@ -30,15 +31,11 @@ Result CarRepository::update(Entities::Car &&entity) { QWriteLocker locker(&m_lock); - if (entity.metaData().brandSet) - { - - Result brandResult = m_brandRepository->updateEntityInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("brand"), entity.brand()); + if (entity.metaData().brandSet) { + Result brandResult = m_brandRepository->updateEntityInRelationOf(Entities::Car::schema, entity.id(), "brand"_L1, entity.brand()); #ifdef QT_DEBUG - if (brandResult.isError()) - { + if (brandResult.isError()) { qCritical() << brandResult.error().code() << brandResult.error().message() << brandResult.error().data(); qFatal("Error found. The application will now exit"); } @@ -46,17 +43,13 @@ Result CarRepository::update(Entities::Car &&entity) QLN_RETURN_IF_ERROR(Entities::Car, brandResult) } - if (entity.metaData().passengersSet) - { - - Result> passengersResult = m_passengerRepository->updateEntitiesInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("passengers"), entity.passengers()); + if (entity.metaData().passengersSet) { + Result> passengersResult = + m_passengerRepository->updateEntitiesInRelationOf(Entities::Car::schema, entity.id(), "passengers"_L1, entity.passengers()); #ifdef QT_DEBUG - if (passengersResult.isError()) - { - qCritical() << passengersResult.error().code() << passengersResult.error().message() - << passengersResult.error().data(); + if (passengersResult.isError()) { + qCritical() << passengersResult.error().code() << passengersResult.error().message() << passengersResult.error().data(); qFatal("Error found. The application will now exit"); } #endif @@ -71,19 +64,16 @@ Result CarRepository::getWithDetails(int entityId) QWriteLocker locker(&m_lock); auto getResult = Qleany::Repository::GenericRepository::get(entityId); - if (getResult.isError()) - { + if (getResult.isError()) { return getResult; } Entities::Car entity = getResult.value(); - Result brandResult = - m_brandRepository->getEntityInRelationOf(Entities::Car::schema, entity.id(), QString::fromLatin1("brand")); + Result brandResult = m_brandRepository->getEntityInRelationOf(Entities::Car::schema, entity.id(), "brand"_L1); #ifdef QT_DEBUG - if (brandResult.isError()) - { + if (brandResult.isError()) { qCritical() << brandResult.error().code() << brandResult.error().message() << brandResult.error().data(); qFatal("Error found. The application will now exit"); } @@ -92,14 +82,11 @@ Result CarRepository::getWithDetails(int entityId) entity.setBrand(brandResult.value()); - Result> passengersResult = m_passengerRepository->getEntitiesInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("passengers")); + Result> passengersResult = m_passengerRepository->getEntitiesInRelationOf(Entities::Car::schema, entity.id(), "passengers"_L1); #ifdef QT_DEBUG - if (passengersResult.isError()) - { - qCritical() << passengersResult.error().code() << passengersResult.error().message() - << passengersResult.error().data(); + if (passengersResult.isError()) { + qCritical() << passengersResult.error().code() << passengersResult.error().message() << passengersResult.error().data(); qFatal("Error found. The application will now exit"); } #endif @@ -115,21 +102,17 @@ FrontEnds::Entities::Car::BrandLoader CarRepository::fetchBrandLoader() #ifdef QT_DEBUG // verify the presence of "brand" property in the entity Car using staticMetaObject int propertyIndex = FrontEnds::Entities::Car::staticMetaObject.indexOfProperty("brand"); - if (propertyIndex == -1) - { + if (propertyIndex == -1) { qCritical() << "The entity Car doesn't have a property named brand"; qFatal("The application will now exit"); } #endif return [this](int entityId) { - auto foreignEntityResult = m_brandRepository->getEntityInRelationOf(FrontEnds::Entities::Car::schema, entityId, - QString::fromLatin1("brand")); + auto foreignEntityResult = m_brandRepository->getEntityInRelationOf(FrontEnds::Entities::Car::schema, entityId, "brand"_L1); - if (foreignEntityResult.isError()) - { - qCritical() << foreignEntityResult.error().code() << foreignEntityResult.error().message() - << foreignEntityResult.error().data(); + if (foreignEntityResult.isError()) { + qCritical() << foreignEntityResult.error().code() << foreignEntityResult.error().message() << foreignEntityResult.error().data(); return FrontEnds::Entities::Brand(); } @@ -142,21 +125,18 @@ FrontEnds::Entities::Car::PassengersLoader CarRepository::fetchPassengersLoader( #ifdef QT_DEBUG // verify the presence of "passengers" property in the entity Car using staticMetaObject int propertyIndex = FrontEnds::Entities::Car::staticMetaObject.indexOfProperty("passengers"); - if (propertyIndex == -1) - { + if (propertyIndex == -1) { qCritical() << "The entity Car doesn't have a property named passengers"; qFatal("The application will now exit"); } #endif return [this](int entityId) { - auto foreignEntitiesResult = m_passengerRepository->getEntitiesInRelationOf( - FrontEnds::Entities::Car::schema, entityId, QString::fromLatin1("passengers")); + auto foreignEntitiesResult = + m_passengerRepository->getEntitiesInRelationOf(FrontEnds::Entities::Car::schema, entityId, QString::fromLatin1("passengers")); - if (foreignEntitiesResult.isError()) - { - qCritical() << foreignEntitiesResult.error().code() << foreignEntitiesResult.error().message() - << foreignEntitiesResult.error().data(); + if (foreignEntitiesResult.isError()) { + qCritical() << foreignEntitiesResult.error().code() << foreignEntitiesResult.error().message() << foreignEntitiesResult.error().data(); return QList(); } @@ -164,34 +144,28 @@ FrontEnds::Entities::Car::PassengersLoader CarRepository::fetchPassengersLoader( }; } -Result>> CarRepository::removeInCascade(QList ids) +Result>> CarRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // remove the brand in cascade Qleany::Entities::RelationshipInfo brandBrandRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Brand && - relationship.fieldName == QString::fromLatin1("brand")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Brand && relationship.fieldName == "brand"_L1) { brandBrandRelationship = relationship; break; } } - for (int entityId : ids) - { - if (brandBrandRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (brandBrandRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities FrontEnds::Entities::Brand foreignBrand = this->fetchBrandLoader().operator()(entityId); - if (!foreignBrand.isValid()) - { + if (!foreignBrand.isValid()) { continue; } @@ -199,8 +173,8 @@ Result>> CarRepository::removeInCascade(QList ids) foreignIds.append(foreignBrand.id()); - auto removalResult = m_brandRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_brandRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -209,39 +183,31 @@ Result>> CarRepository::removeInCascade(QList ids) // remove the passengers in cascade Qleany::Entities::RelationshipInfo passengerPassengersRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("passengers")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == "passengers"_L1) { passengerPassengersRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerPassengersRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerPassengersRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities - QList foreignPassengers = - this->fetchPassengersLoader().operator()(entityId); + QList foreignPassengers = this->fetchPassengersLoader().operator()(entityId); - if (foreignPassengers.isEmpty()) - { + if (foreignPassengers.isEmpty()) { continue; } QList foreignIds; - for (const auto &passenger : foreignPassengers) - { + for (const auto &passenger : foreignPassengers) { foreignIds.append(passenger.id()); } - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -250,45 +216,39 @@ Result>> CarRepository::removeInCascade(QList ids) // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::Car, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Car, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> CarRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> CarRepository::changeActiveStatusInCascade(QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // cahnge active status of the brand in cascade Qleany::Entities::RelationshipInfo brandBrandRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Brand && - relationship.fieldName == QString::fromLatin1("brand")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Brand && relationship.fieldName == QString::fromLatin1("brand")) { brandBrandRelationship = relationship; break; } } - for (int entityId : ids) - { - if (brandBrandRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (brandBrandRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities FrontEnds::Entities::Brand foreignBrand = this->fetchBrandLoader().operator()(entityId); - if (!foreignBrand.isValid()) - { + if (!foreignBrand.isValid()) { continue; } @@ -298,7 +258,7 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< auto changeResult = m_brandRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -307,40 +267,32 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< // cahnge active status of the passengers in cascade Qleany::Entities::RelationshipInfo passengerPassengersRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("passengers")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Car::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == QString::fromLatin1("passengers")) { passengerPassengersRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerPassengersRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerPassengersRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities - QList foreignPassengers = - this->fetchPassengersLoader().operator()(entityId); + QList foreignPassengers = this->fetchPassengersLoader().operator()(entityId); - if (foreignPassengers.isEmpty()) - { + if (foreignPassengers.isEmpty()) { continue; } QList foreignIds; - for (const auto &passenger : foreignPassengers) - { + for (const auto &passenger : foreignPassengers) { foreignIds.append(passenger.id()); } auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -350,10 +302,10 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::Car, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Car, changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/car_repository.h b/examples/front_ends/src/core/persistence/repository/car_repository.h index 1d07f942..e5e791da 100644 --- a/examples/front_ends/src/core/persistence/repository/car_repository.h +++ b/examples/front_ends/src/core/persistence/repository/car_repository.h @@ -19,11 +19,10 @@ using namespace Qleany::Contracts::Database; namespace FrontEnds::Persistence::Repository { -class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT CarRepository final - : public Qleany::Repository::GenericRepository, - public FrontEnds::Contracts::Repository::InterfaceCarRepository +class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT CarRepository final : public Qleany::Repository::GenericRepository, + public FrontEnds::Contracts::Repository::InterfaceCarRepository { - public: +public: explicit CarRepository(InterfaceDatabaseTableGroup *carDatabase, InterfaceBrandRepository *brandRepository, InterfacePassengerRepository *passengerRepository); @@ -37,14 +36,14 @@ class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT CarRepository final FrontEnds::Entities::Car::PassengersLoader fetchPassengersLoader() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, bool active) override; - private: +private: InterfaceBrandRepository *m_brandRepository; InterfacePassengerRepository *m_passengerRepository; QScopedPointer m_signalHolder; QReadWriteLock m_lock; }; -} // namespace FrontEnds::Persistence::Repository \ No newline at end of file +} // namespace FrontEnds::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/client_repository.cpp b/examples/front_ends/src/core/persistence/repository/client_repository.cpp index a0abe3f0..0fe7a8d8 100644 --- a/examples/front_ends/src/core/persistence/repository/client_repository.cpp +++ b/examples/front_ends/src/core/persistence/repository/client_repository.cpp @@ -11,10 +11,9 @@ using namespace Qleany::Contracts::Repository; using namespace FrontEnds::Persistence::Repository; using namespace FrontEnds::Contracts::Repository; -ClientRepository::ClientRepository(InterfaceDatabaseTableGroup *clientDatabase, - InterfacePassengerRepository *passengerRepository) - : Qleany::Repository::GenericRepository(clientDatabase), - m_passengerRepository(passengerRepository) +ClientRepository::ClientRepository(InterfaceDatabaseTableGroup *clientDatabase, InterfacePassengerRepository *passengerRepository) + : Qleany::Repository::GenericRepository(clientDatabase) + , m_passengerRepository(passengerRepository) { m_signalHolder.reset(new SignalHolder(nullptr)); } @@ -29,15 +28,12 @@ Result ClientRepository::update(Entities::Client && { QWriteLocker locker(&m_lock); - if (entity.metaData().clientSet) - { - - Result clientResult = m_passengerRepository->updateEntityInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("client"), entity.client()); + if (entity.metaData().clientSet) { + Result clientResult = + m_passengerRepository->updateEntityInRelationOf(Entities::Client::schema, entity.id(), "client"_L1, entity.client()); #ifdef QT_DEBUG - if (clientResult.isError()) - { + if (clientResult.isError()) { qCritical() << clientResult.error().code() << clientResult.error().message() << clientResult.error().data(); qFatal("Error found. The application will now exit"); } @@ -45,17 +41,13 @@ Result ClientRepository::update(Entities::Client && QLN_RETURN_IF_ERROR(Entities::Client, clientResult) } - if (entity.metaData().clientFriendsSet) - { - - Result> clientFriendsResult = m_passengerRepository->updateEntitiesInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("clientFriends"), entity.clientFriends()); + if (entity.metaData().clientFriendsSet) { + Result> clientFriendsResult = + m_passengerRepository->updateEntitiesInRelationOf(Entities::Client::schema, entity.id(), "clientFriends"_L1, entity.clientFriends()); #ifdef QT_DEBUG - if (clientFriendsResult.isError()) - { - qCritical() << clientFriendsResult.error().code() << clientFriendsResult.error().message() - << clientFriendsResult.error().data(); + if (clientFriendsResult.isError()) { + qCritical() << clientFriendsResult.error().code() << clientFriendsResult.error().message() << clientFriendsResult.error().data(); qFatal("Error found. The application will now exit"); } #endif @@ -70,19 +62,16 @@ Result ClientRepository::getWithDetails(int entityI QWriteLocker locker(&m_lock); auto getResult = Qleany::Repository::GenericRepository::get(entityId); - if (getResult.isError()) - { + if (getResult.isError()) { return getResult; } Entities::Client entity = getResult.value(); - Result clientResult = m_passengerRepository->getEntityInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("client")); + Result clientResult = m_passengerRepository->getEntityInRelationOf(Entities::Client::schema, entity.id(), "client"_L1); #ifdef QT_DEBUG - if (clientResult.isError()) - { + if (clientResult.isError()) { qCritical() << clientResult.error().code() << clientResult.error().message() << clientResult.error().data(); qFatal("Error found. The application will now exit"); } @@ -91,14 +80,12 @@ Result ClientRepository::getWithDetails(int entityI entity.setClient(clientResult.value()); - Result> clientFriendsResult = m_passengerRepository->getEntitiesInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("clientFriends")); + Result> clientFriendsResult = + m_passengerRepository->getEntitiesInRelationOf(Entities::Client::schema, entity.id(), "clientFriends"_L1); #ifdef QT_DEBUG - if (clientFriendsResult.isError()) - { - qCritical() << clientFriendsResult.error().code() << clientFriendsResult.error().message() - << clientFriendsResult.error().data(); + if (clientFriendsResult.isError()) { + qCritical() << clientFriendsResult.error().code() << clientFriendsResult.error().message() << clientFriendsResult.error().data(); qFatal("Error found. The application will now exit"); } #endif @@ -114,21 +101,17 @@ FrontEnds::Entities::Client::ClientLoader ClientRepository::fetchClientLoader() #ifdef QT_DEBUG // verify the presence of "client" property in the entity Client using staticMetaObject int propertyIndex = FrontEnds::Entities::Client::staticMetaObject.indexOfProperty("client"); - if (propertyIndex == -1) - { + if (propertyIndex == -1) { qCritical() << "The entity Client doesn't have a property named client"; qFatal("The application will now exit"); } #endif return [this](int entityId) { - auto foreignEntityResult = m_passengerRepository->getEntityInRelationOf( - FrontEnds::Entities::Client::schema, entityId, QString::fromLatin1("client")); + auto foreignEntityResult = m_passengerRepository->getEntityInRelationOf(FrontEnds::Entities::Client::schema, entityId, "client"_L1); - if (foreignEntityResult.isError()) - { - qCritical() << foreignEntityResult.error().code() << foreignEntityResult.error().message() - << foreignEntityResult.error().data(); + if (foreignEntityResult.isError()) { + qCritical() << foreignEntityResult.error().code() << foreignEntityResult.error().message() << foreignEntityResult.error().data(); return FrontEnds::Entities::Passenger(); } @@ -141,21 +124,18 @@ FrontEnds::Entities::Client::ClientFriendsLoader ClientRepository::fetchClientFr #ifdef QT_DEBUG // verify the presence of "clientFriends" property in the entity Client using staticMetaObject int propertyIndex = FrontEnds::Entities::Client::staticMetaObject.indexOfProperty("clientFriends"); - if (propertyIndex == -1) - { + if (propertyIndex == -1) { qCritical() << "The entity Client doesn't have a property named clientFriends"; qFatal("The application will now exit"); } #endif return [this](int entityId) { - auto foreignEntitiesResult = m_passengerRepository->getEntitiesInRelationOf( - FrontEnds::Entities::Client::schema, entityId, QString::fromLatin1("clientFriends")); + auto foreignEntitiesResult = + m_passengerRepository->getEntitiesInRelationOf(FrontEnds::Entities::Client::schema, entityId, QString::fromLatin1("clientFriends")); - if (foreignEntitiesResult.isError()) - { - qCritical() << foreignEntitiesResult.error().code() << foreignEntitiesResult.error().message() - << foreignEntitiesResult.error().data(); + if (foreignEntitiesResult.isError()) { + qCritical() << foreignEntitiesResult.error().code() << foreignEntitiesResult.error().message() << foreignEntitiesResult.error().data(); return QList(); } @@ -163,34 +143,28 @@ FrontEnds::Entities::Client::ClientFriendsLoader ClientRepository::fetchClientFr }; } -Result>> ClientRepository::removeInCascade(QList ids) +Result>> ClientRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // remove the client in cascade Qleany::Entities::RelationshipInfo passengerClientRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("client")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == "client"_L1) { passengerClientRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerClientRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerClientRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities FrontEnds::Entities::Passenger foreignClient = this->fetchClientLoader().operator()(entityId); - if (!foreignClient.isValid()) - { + if (!foreignClient.isValid()) { continue; } @@ -198,8 +172,8 @@ Result>> ClientRepository::removeInCascade(QList ids) foreignIds.append(foreignClient.id()); - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -208,39 +182,31 @@ Result>> ClientRepository::removeInCascade(QList ids) // remove the clientFriends in cascade Qleany::Entities::RelationshipInfo passengerClientFriendsRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("clientFriends")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == "clientFriends"_L1) { passengerClientFriendsRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerClientFriendsRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerClientFriendsRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities - QList foreignClientFriends = - this->fetchClientFriendsLoader().operator()(entityId); + QList foreignClientFriends = this->fetchClientFriendsLoader().operator()(entityId); - if (foreignClientFriends.isEmpty()) - { + if (foreignClientFriends.isEmpty()) { continue; } QList foreignIds; - for (const auto &passenger : foreignClientFriends) - { + for (const auto &passenger : foreignClientFriends) { foreignIds.append(passenger.id()); } - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -249,45 +215,39 @@ Result>> ClientRepository::removeInCascade(QList ids) // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::Client, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Client, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> ClientRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> ClientRepository::changeActiveStatusInCascade(QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // cahnge active status of the client in cascade Qleany::Entities::RelationshipInfo passengerClientRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("client")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == QString::fromLatin1("client")) { passengerClientRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerClientRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerClientRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities FrontEnds::Entities::Passenger foreignClient = this->fetchClientLoader().operator()(entityId); - if (!foreignClient.isValid()) - { + if (!foreignClient.isValid()) { continue; } @@ -297,7 +257,7 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -306,40 +266,33 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi // cahnge active status of the clientFriends in cascade Qleany::Entities::RelationshipInfo passengerClientFriendsRelationship; - for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) - { - if (relationship.rightEntityId == FrontEnds::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("clientFriends")) - { + for (const Qleany::Entities::RelationshipInfo &relationship : FrontEnds::Entities::Client::schema.relationships) { + if (relationship.rightEntityId == FrontEnds::Entities::Entities::EntityEnum::Passenger + && relationship.fieldName == QString::fromLatin1("clientFriends")) { passengerClientFriendsRelationship = relationship; break; } } - for (int entityId : ids) - { - if (passengerClientFriendsRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) - { + for (int entityId : ids) { + if (passengerClientFriendsRelationship.strength == Qleany::Entities::RelationshipStrength::Strong) { // get foreign entities - QList foreignClientFriends = - this->fetchClientFriendsLoader().operator()(entityId); + QList foreignClientFriends = this->fetchClientFriendsLoader().operator()(entityId); - if (foreignClientFriends.isEmpty()) - { + if (foreignClientFriends.isEmpty()) { continue; } QList foreignIds; - for (const auto &passenger : foreignClientFriends) - { + for (const auto &passenger : foreignClientFriends) { foreignIds.append(passenger.id()); } auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -349,10 +302,10 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::Client, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Client, changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/client_repository.h b/examples/front_ends/src/core/persistence/repository/client_repository.h index d2392b76..3b27174b 100644 --- a/examples/front_ends/src/core/persistence/repository/client_repository.h +++ b/examples/front_ends/src/core/persistence/repository/client_repository.h @@ -18,13 +18,11 @@ using namespace Qleany::Contracts::Database; namespace FrontEnds::Persistence::Repository { -class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT ClientRepository final - : public Qleany::Repository::GenericRepository, - public FrontEnds::Contracts::Repository::InterfaceClientRepository +class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT ClientRepository final : public Qleany::Repository::GenericRepository, + public FrontEnds::Contracts::Repository::InterfaceClientRepository { - public: - explicit ClientRepository(InterfaceDatabaseTableGroup *clientDatabase, - InterfacePassengerRepository *passengerRepository); +public: + explicit ClientRepository(InterfaceDatabaseTableGroup *clientDatabase, InterfacePassengerRepository *passengerRepository); SignalHolder *signalHolder() override; @@ -35,13 +33,13 @@ class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT ClientRepository final FrontEnds::Entities::Client::ClientFriendsLoader fetchClientFriendsLoader() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, bool active) override; - private: +private: InterfacePassengerRepository *m_passengerRepository; QScopedPointer m_signalHolder; QReadWriteLock m_lock; }; -} // namespace FrontEnds::Persistence::Repository \ No newline at end of file +} // namespace FrontEnds::Repository \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/passenger_repository.cpp b/examples/front_ends/src/core/persistence/repository/passenger_repository.cpp index 647c89aa..6c7b8e3e 100644 --- a/examples/front_ends/src/core/persistence/repository/passenger_repository.cpp +++ b/examples/front_ends/src/core/persistence/repository/passenger_repository.cpp @@ -23,38 +23,38 @@ SignalHolder *PassengerRepository::signalHolder() return m_signalHolder.data(); } -Result>> PassengerRepository::removeInCascade(QList ids) +Result>> PassengerRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::Passenger, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Passenger, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> PassengerRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> PassengerRepository::changeActiveStatusInCascade(QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // finally change the entites of this repository Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::Passenger, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(FrontEnds::Entities::Entities::EntityEnum::Passenger, changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/front_ends/src/core/persistence/repository/passenger_repository.h b/examples/front_ends/src/core/persistence/repository/passenger_repository.h index 56d4c76e..bd393808 100644 --- a/examples/front_ends/src/core/persistence/repository/passenger_repository.h +++ b/examples/front_ends/src/core/persistence/repository/passenger_repository.h @@ -17,21 +17,20 @@ using namespace Qleany::Contracts::Database; namespace FrontEnds::Persistence::Repository { -class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT PassengerRepository final - : public Qleany::Repository::GenericRepository, - public FrontEnds::Contracts::Repository::InterfacePassengerRepository +class FRONT_ENDS_EXAMPLE_PERSISTENCE_EXPORT PassengerRepository final : public Qleany::Repository::GenericRepository, + public FrontEnds::Contracts::Repository::InterfacePassengerRepository { - public: +public: explicit PassengerRepository(InterfaceDatabaseTableGroup *passengerDatabase); SignalHolder *signalHolder() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, bool active) override; - private: +private: QScopedPointer m_signalHolder; QReadWriteLock m_lock; }; -} // namespace FrontEnds::Persistence::Repository \ No newline at end of file +} // namespace FrontEnds::Repository \ No newline at end of file diff --git a/examples/simple/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp b/examples/simple/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp index 41101d2a..eba060a0 100644 --- a/examples/simple/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp +++ b/examples/simple/src/core/application/brand_feature/brand/commands/create_brand_command_handler.cpp @@ -162,11 +162,11 @@ Result CreateBrandCommandHandler::handleImpl(QPromise> &p Result CreateBrandCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(BrandDTO, deleteResult) - Q_EMIT brandRemoved(deleteResult.value()); + Q_EMIT brandRemoved(deleteResult.value().value(Simple::Entities::Entities::EntityEnum::Brand).first()); qDebug() << "Brand removed:" << deleteResult.value(); diff --git a/examples/simple/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp b/examples/simple/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp index 18857867..580eae2a 100644 --- a/examples/simple/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp +++ b/examples/simple/src/core/application/brand_feature/brand/commands/remove_brand_command_handler.cpp @@ -73,7 +73,7 @@ Result RemoveBrandCommandHandler::handleImpl(QPromise> &progre // save old entity m_oldState = brandResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << brandId); + auto deleteResult = m_repository->remove(QList() << brandId); QLN_RETURN_IF_ERROR(int, deleteResult) diff --git a/examples/simple/src/core/application/car_feature/car/commands/create_car_command_handler.cpp b/examples/simple/src/core/application/car_feature/car/commands/create_car_command_handler.cpp index ce1b99f6..4e4e336b 100644 --- a/examples/simple/src/core/application/car_feature/car/commands/create_car_command_handler.cpp +++ b/examples/simple/src/core/application/car_feature/car/commands/create_car_command_handler.cpp @@ -119,11 +119,11 @@ Result CreateCarCommandHandler::handleImpl(QPromise> &progr Result CreateCarCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(CarDTO, deleteResult) - Q_EMIT carRemoved(deleteResult.value()); + Q_EMIT carRemoved(deleteResult.value().value(Simple::Entities::Entities::EntityEnum::Car).first()); qDebug() << "Car removed:" << deleteResult.value(); diff --git a/examples/simple/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp b/examples/simple/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp index bff4f9cf..bcc85bfe 100644 --- a/examples/simple/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp +++ b/examples/simple/src/core/application/car_feature/car/commands/remove_car_command_handler.cpp @@ -72,7 +72,7 @@ Result RemoveCarCommandHandler::handleImpl(QPromise> &progress // save old entity m_oldState = carResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << carId); + auto deleteResult = m_repository->remove(QList() << carId); QLN_RETURN_IF_ERROR(int, deleteResult) diff --git a/examples/simple/src/core/application/client_feature/client/commands/create_client_command_handler.cpp b/examples/simple/src/core/application/client_feature/client/commands/create_client_command_handler.cpp index 907948f1..3523ada0 100644 --- a/examples/simple/src/core/application/client_feature/client/commands/create_client_command_handler.cpp +++ b/examples/simple/src/core/application/client_feature/client/commands/create_client_command_handler.cpp @@ -121,11 +121,11 @@ Result CreateClientCommandHandler::handleImpl(QPromise> Result CreateClientCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(ClientDTO, deleteResult) - Q_EMIT clientRemoved(deleteResult.value()); + Q_EMIT clientRemoved(deleteResult.value().value(Simple::Entities::Entities::EntityEnum::Client).first()); qDebug() << "Client removed:" << deleteResult.value(); diff --git a/examples/simple/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp b/examples/simple/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp index 0f62460a..8b74ba16 100644 --- a/examples/simple/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp +++ b/examples/simple/src/core/application/client_feature/client/commands/remove_client_command_handler.cpp @@ -73,7 +73,7 @@ Result RemoveClientCommandHandler::handleImpl(QPromise> &progr // save old entity m_oldState = clientResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << clientId); + auto deleteResult = m_repository->remove(QList() << clientId); QLN_RETURN_IF_ERROR(int, deleteResult) diff --git a/examples/simple/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp b/examples/simple/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp index 81e0e2c5..f4c481fa 100644 --- a/examples/simple/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp +++ b/examples/simple/src/core/application/passenger_feature/passenger/commands/create_passenger_command_handler.cpp @@ -185,11 +185,11 @@ Result CreatePassengerCommandHandler::handleImpl(QPromise CreatePassengerCommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR(PassengerDTO, deleteResult) - Q_EMIT passengerRemoved(deleteResult.value()); + Q_EMIT passengerRemoved(deleteResult.value().value(Simple::Entities::Entities::EntityEnum::Passenger).first()); qDebug() << "Passenger removed:" << deleteResult.value(); diff --git a/examples/simple/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp b/examples/simple/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp index a35740aa..55c8df65 100644 --- a/examples/simple/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp +++ b/examples/simple/src/core/application/passenger_feature/passenger/commands/remove_passenger_command_handler.cpp @@ -74,7 +74,7 @@ Result RemovePassengerCommandHandler::handleImpl(QPromise> &pr // save old entity m_oldState = passengerResult.value(); - auto deleteResult = m_repository->removeInCascade(QList() << passengerId); + auto deleteResult = m_repository->remove(QList() << passengerId); QLN_RETURN_IF_ERROR(int, deleteResult) diff --git a/examples/simple/src/core/contracts/CMakeLists.txt b/examples/simple/src/core/contracts/CMakeLists.txt index 3de7a2b6..e7a86eef 100755 --- a/examples/simple/src/core/contracts/CMakeLists.txt +++ b/examples/simple/src/core/contracts/CMakeLists.txt @@ -15,15 +15,17 @@ generate_export_header(${LIBRARY_NAME} BASE_NAME simple_example_contracts ) -set_target_properties(${LIBRARY_NAME} PROPERTIES - POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} - ) - target_include_directories(${LIBRARY_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) +set_target_properties(${LIBRARY_NAME} PROPERTIES + POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS} + ) + +set_target_properties(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX) + target_link_libraries(${LIBRARY_NAME} PRIVATE simple-example-entities) target_link_libraries(${LIBRARY_NAME} diff --git a/examples/simple/src/core/contracts/repository/interface_brand_repository.h b/examples/simple/src/core/contracts/repository/interface_brand_repository.h index 977909f1..464d4e9f 100644 --- a/examples/simple/src/core/contracts/repository/interface_brand_repository.h +++ b/examples/simple/src/core/contracts/repository/interface_brand_repository.h @@ -23,7 +23,8 @@ class SIMPLE_EXAMPLE_CONTRACTS_EXPORT InterfaceBrandRepository { } - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade( + QList ids, bool active) = 0; }; } // namespace Simple::Contracts::Repository \ No newline at end of file diff --git a/examples/simple/src/core/contracts/repository/interface_car_repository.h b/examples/simple/src/core/contracts/repository/interface_car_repository.h index 78ddc2a0..fadfb14c 100644 --- a/examples/simple/src/core/contracts/repository/interface_car_repository.h +++ b/examples/simple/src/core/contracts/repository/interface_car_repository.h @@ -23,14 +23,15 @@ class SIMPLE_EXAMPLE_CONTRACTS_EXPORT InterfaceCarRepository { } - virtual Result update(Simple::Entities::Car &&entity) = 0; + virtual Result update(Simple::Entities::Car &&entity) override = 0; virtual Result getWithDetails(int entityId) = 0; virtual Simple::Entities::Car::BrandLoader fetchBrandLoader() = 0; virtual Simple::Entities::Car::PassengersLoader fetchPassengersLoader() = 0; - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade( + QList ids, bool active) = 0; }; } // namespace Simple::Contracts::Repository \ No newline at end of file diff --git a/examples/simple/src/core/contracts/repository/interface_client_repository.h b/examples/simple/src/core/contracts/repository/interface_client_repository.h index daa7fc22..a128c3a2 100644 --- a/examples/simple/src/core/contracts/repository/interface_client_repository.h +++ b/examples/simple/src/core/contracts/repository/interface_client_repository.h @@ -23,14 +23,15 @@ class SIMPLE_EXAMPLE_CONTRACTS_EXPORT InterfaceClientRepository { } - virtual Result update(Simple::Entities::Client &&entity) = 0; + virtual Result update(Simple::Entities::Client &&entity) override = 0; virtual Result getWithDetails(int entityId) = 0; virtual Simple::Entities::Client::ClientLoader fetchClientLoader() = 0; virtual Simple::Entities::Client::ClientFriendsLoader fetchClientFriendsLoader() = 0; - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade( + QList ids, bool active) = 0; }; } // namespace Simple::Contracts::Repository \ No newline at end of file diff --git a/examples/simple/src/core/contracts/repository/interface_passenger_repository.h b/examples/simple/src/core/contracts/repository/interface_passenger_repository.h index e4e6f446..068cb4d0 100644 --- a/examples/simple/src/core/contracts/repository/interface_passenger_repository.h +++ b/examples/simple/src/core/contracts/repository/interface_passenger_repository.h @@ -23,7 +23,8 @@ class SIMPLE_EXAMPLE_CONTRACTS_EXPORT InterfacePassengerRepository { } - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade( + QList ids, bool active) = 0; }; } // namespace Simple::Contracts::Repository \ No newline at end of file diff --git a/examples/simple/src/core/persistence/persistence_registration.cpp b/examples/simple/src/core/persistence/persistence_registration.cpp index a09a3951..a400825a 100644 --- a/examples/simple/src/core/persistence/persistence_registration.cpp +++ b/examples/simple/src/core/persistence/persistence_registration.cpp @@ -31,16 +31,15 @@ PersistenceRegistration::PersistenceRegistration(QObject *parent) : QObject{pare if (initResult.hasError()) { Error error = initResult.error(); - qCritical() << error.className() + QString::fromLatin1("\n") + error.code() + QString::fromLatin1("\n") + - error.message() + QString::fromLatin1("\n") + error.data(); + qCritical() << error.className() + "\n"_L1 + error.code() + "\n"_L1 + error.message() + "\n"_L1 + error.data(); } // repositories: - BrandRepository *brandRepository = new BrandRepository(brandDatabaseTableGroup); PassengerRepository *passengerRepository = new PassengerRepository(passengerDatabaseTableGroup); - ClientRepository *clientRepository = new ClientRepository(clientDatabaseTableGroup, passengerRepository); + BrandRepository *brandRepository = new BrandRepository(brandDatabaseTableGroup); CarRepository *carRepository = new CarRepository(carDatabaseTableGroup, brandRepository, passengerRepository); + ClientRepository *clientRepository = new ClientRepository(clientDatabaseTableGroup, passengerRepository); // register repositories: @@ -53,4 +52,4 @@ PersistenceRegistration::PersistenceRegistration(QObject *parent) : QObject{pare RepositoryProvider *PersistenceRegistration::repositoryProvider() { return RepositoryProvider::instance(); -} +} \ No newline at end of file diff --git a/examples/simple/src/core/persistence/repository/brand_repository.cpp b/examples/simple/src/core/persistence/repository/brand_repository.cpp index b98ddc7a..0fbc8ee8 100644 --- a/examples/simple/src/core/persistence/repository/brand_repository.cpp +++ b/examples/simple/src/core/persistence/repository/brand_repository.cpp @@ -23,38 +23,40 @@ SignalHolder *BrandRepository::signalHolder() return m_signalHolder.data(); } -Result>> BrandRepository::removeInCascade(QList ids) +Result>> BrandRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::Brand, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::EntityEnum::Brand, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> BrandRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> BrandRepository::changeActiveStatusInCascade( + QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // finally change the entites of this repository Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::Brand, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::EntityEnum::Brand, + changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/simple/src/core/persistence/repository/brand_repository.h b/examples/simple/src/core/persistence/repository/brand_repository.h index 1ad7f93f..7132115b 100644 --- a/examples/simple/src/core/persistence/repository/brand_repository.h +++ b/examples/simple/src/core/persistence/repository/brand_repository.h @@ -26,8 +26,9 @@ class SIMPLE_EXAMPLE_PERSISTENCE_EXPORT BrandRepository final SignalHolder *signalHolder() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, + bool active) override; private: QScopedPointer m_signalHolder; diff --git a/examples/simple/src/core/persistence/repository/car_repository.cpp b/examples/simple/src/core/persistence/repository/car_repository.cpp index 0291bc65..9f197a6b 100644 --- a/examples/simple/src/core/persistence/repository/car_repository.cpp +++ b/examples/simple/src/core/persistence/repository/car_repository.cpp @@ -33,8 +33,8 @@ Result CarRepository::update(Entities::Car &&entity) if (entity.metaData().brandSet) { - Result brandResult = m_brandRepository->updateEntityInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("brand"), entity.brand()); + Result brandResult = + m_brandRepository->updateEntityInRelationOf(Entities::Car::schema, entity.id(), "brand"_L1, entity.brand()); #ifdef QT_DEBUG if (brandResult.isError()) @@ -50,7 +50,7 @@ Result CarRepository::update(Entities::Car &&entity) { Result> passengersResult = m_passengerRepository->updateEntitiesInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("passengers"), entity.passengers()); + Entities::Car::schema, entity.id(), "passengers"_L1, entity.passengers()); #ifdef QT_DEBUG if (passengersResult.isError()) @@ -79,7 +79,7 @@ Result CarRepository::getWithDetails(int entityId) Entities::Car entity = getResult.value(); Result brandResult = - m_brandRepository->getEntityInRelationOf(Entities::Car::schema, entity.id(), QString::fromLatin1("brand")); + m_brandRepository->getEntityInRelationOf(Entities::Car::schema, entity.id(), "brand"_L1); #ifdef QT_DEBUG if (brandResult.isError()) @@ -92,8 +92,8 @@ Result CarRepository::getWithDetails(int entityId) entity.setBrand(brandResult.value()); - Result> passengersResult = m_passengerRepository->getEntitiesInRelationOf( - Entities::Car::schema, entity.id(), QString::fromLatin1("passengers")); + Result> passengersResult = + m_passengerRepository->getEntitiesInRelationOf(Entities::Car::schema, entity.id(), "passengers"_L1); #ifdef QT_DEBUG if (passengersResult.isError()) @@ -123,8 +123,8 @@ Simple::Entities::Car::BrandLoader CarRepository::fetchBrandLoader() #endif return [this](int entityId) { - auto foreignEntityResult = m_brandRepository->getEntityInRelationOf(Simple::Entities::Car::schema, entityId, - QString::fromLatin1("brand")); + auto foreignEntityResult = + m_brandRepository->getEntityInRelationOf(Simple::Entities::Car::schema, entityId, "brand"_L1); if (foreignEntityResult.isError()) { @@ -164,18 +164,18 @@ Simple::Entities::Car::PassengersLoader CarRepository::fetchPassengersLoader() }; } -Result>> CarRepository::removeInCascade(QList ids) +Result>> CarRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // remove the brand in cascade Qleany::Entities::RelationshipInfo brandBrandRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Car::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Brand && - relationship.fieldName == QString::fromLatin1("brand")) + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Brand && + relationship.fieldName == "brand"_L1) { brandBrandRelationship = relationship; break; @@ -199,8 +199,8 @@ Result>> CarRepository::removeInCascade(QList ids) foreignIds.append(foreignBrand.id()); - auto removalResult = m_brandRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_brandRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -211,8 +211,8 @@ Result>> CarRepository::removeInCascade(QList ids) Qleany::Entities::RelationshipInfo passengerPassengersRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Car::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("passengers")) + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && + relationship.fieldName == "passengers"_L1) { passengerPassengersRelationship = relationship; break; @@ -239,8 +239,8 @@ Result>> CarRepository::removeInCascade(QList ids) foreignIds.append(passenger.id()); } - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -249,28 +249,29 @@ Result>> CarRepository::removeInCascade(QList ids) // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::Car, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::EntityEnum::Car, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> CarRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> CarRepository::changeActiveStatusInCascade( + QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // cahnge active status of the brand in cascade Qleany::Entities::RelationshipInfo brandBrandRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Car::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Brand && + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Brand && relationship.fieldName == QString::fromLatin1("brand")) { brandBrandRelationship = relationship; @@ -297,7 +298,7 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< auto changeResult = m_brandRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -308,7 +309,7 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< Qleany::Entities::RelationshipInfo passengerPassengersRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Car::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == QString::fromLatin1("passengers")) { passengerPassengersRelationship = relationship; @@ -338,7 +339,7 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -348,10 +349,11 @@ Result>> CarRepository::changeActiveStatusInCascade(QList< Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::Car, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::EntityEnum::Car, + changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/simple/src/core/persistence/repository/car_repository.h b/examples/simple/src/core/persistence/repository/car_repository.h index b63c213f..96d00f05 100644 --- a/examples/simple/src/core/persistence/repository/car_repository.h +++ b/examples/simple/src/core/persistence/repository/car_repository.h @@ -37,8 +37,9 @@ class SIMPLE_EXAMPLE_PERSISTENCE_EXPORT CarRepository final Simple::Entities::Car::PassengersLoader fetchPassengersLoader() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, + bool active) override; private: InterfaceBrandRepository *m_brandRepository; diff --git a/examples/simple/src/core/persistence/repository/client_repository.cpp b/examples/simple/src/core/persistence/repository/client_repository.cpp index d9e37670..d2ec36b7 100644 --- a/examples/simple/src/core/persistence/repository/client_repository.cpp +++ b/examples/simple/src/core/persistence/repository/client_repository.cpp @@ -33,7 +33,7 @@ Result ClientRepository::update(Entities::Client &&ent { Result clientResult = m_passengerRepository->updateEntityInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("client"), entity.client()); + Entities::Client::schema, entity.id(), "client"_L1, entity.client()); #ifdef QT_DEBUG if (clientResult.isError()) @@ -49,7 +49,7 @@ Result ClientRepository::update(Entities::Client &&ent { Result> clientFriendsResult = m_passengerRepository->updateEntitiesInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("clientFriends"), entity.clientFriends()); + Entities::Client::schema, entity.id(), "clientFriends"_L1, entity.clientFriends()); #ifdef QT_DEBUG if (clientFriendsResult.isError()) @@ -77,8 +77,8 @@ Result ClientRepository::getWithDetails(int entityId) Entities::Client entity = getResult.value(); - Result clientResult = m_passengerRepository->getEntityInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("client")); + Result clientResult = + m_passengerRepository->getEntityInRelationOf(Entities::Client::schema, entity.id(), "client"_L1); #ifdef QT_DEBUG if (clientResult.isError()) @@ -91,8 +91,8 @@ Result ClientRepository::getWithDetails(int entityId) entity.setClient(clientResult.value()); - Result> clientFriendsResult = m_passengerRepository->getEntitiesInRelationOf( - Entities::Client::schema, entity.id(), QString::fromLatin1("clientFriends")); + Result> clientFriendsResult = + m_passengerRepository->getEntitiesInRelationOf(Entities::Client::schema, entity.id(), "clientFriends"_L1); #ifdef QT_DEBUG if (clientFriendsResult.isError()) @@ -122,8 +122,8 @@ Simple::Entities::Client::ClientLoader ClientRepository::fetchClientLoader() #endif return [this](int entityId) { - auto foreignEntityResult = m_passengerRepository->getEntityInRelationOf( - Simple::Entities::Client::schema, entityId, QString::fromLatin1("client")); + auto foreignEntityResult = + m_passengerRepository->getEntityInRelationOf(Simple::Entities::Client::schema, entityId, "client"_L1); if (foreignEntityResult.isError()) { @@ -163,18 +163,18 @@ Simple::Entities::Client::ClientFriendsLoader ClientRepository::fetchClientFrien }; } -Result>> ClientRepository::removeInCascade(QList ids) +Result>> ClientRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // remove the client in cascade Qleany::Entities::RelationshipInfo passengerClientRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Client::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("client")) + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && + relationship.fieldName == "client"_L1) { passengerClientRelationship = relationship; break; @@ -198,8 +198,8 @@ Result>> ClientRepository::removeInCascade(QList ids) foreignIds.append(foreignClient.id()); - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -210,8 +210,8 @@ Result>> ClientRepository::removeInCascade(QList ids) Qleany::Entities::RelationshipInfo passengerClientFriendsRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Client::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && - relationship.fieldName == QString::fromLatin1("clientFriends")) + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && + relationship.fieldName == "clientFriends"_L1) { passengerClientFriendsRelationship = relationship; break; @@ -239,8 +239,8 @@ Result>> ClientRepository::removeInCascade(QList ids) foreignIds.append(passenger.id()); } - auto removalResult = m_passengerRepository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_passengerRepository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -249,28 +249,29 @@ Result>> ClientRepository::removeInCascade(QList ids) // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::Client, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::EntityEnum::Client, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> ClientRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> ClientRepository::changeActiveStatusInCascade( + QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // cahnge active status of the client in cascade Qleany::Entities::RelationshipInfo passengerClientRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Client::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == QString::fromLatin1("client")) { passengerClientRelationship = relationship; @@ -297,7 +298,7 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -308,7 +309,7 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi Qleany::Entities::RelationshipInfo passengerClientFriendsRelationship; for (const Qleany::Entities::RelationshipInfo &relationship : Simple::Entities::Client::schema.relationships) { - if (relationship.rightEntityId == Simple::Entities::Entities::Passenger && + if (relationship.rightEntityId == Simple::Entities::Entities::EntityEnum::Passenger && relationship.fieldName == QString::fromLatin1("clientFriends")) { passengerClientFriendsRelationship = relationship; @@ -339,7 +340,7 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi auto changeResult = m_passengerRepository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -349,10 +350,11 @@ Result>> ClientRepository::changeActiveStatusInCascade(QLi Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::Client, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::EntityEnum::Client, + changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/simple/src/core/persistence/repository/client_repository.h b/examples/simple/src/core/persistence/repository/client_repository.h index 301236a2..72354cf3 100644 --- a/examples/simple/src/core/persistence/repository/client_repository.h +++ b/examples/simple/src/core/persistence/repository/client_repository.h @@ -35,8 +35,9 @@ class SIMPLE_EXAMPLE_PERSISTENCE_EXPORT ClientRepository final Simple::Entities::Client::ClientFriendsLoader fetchClientFriendsLoader() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, + bool active) override; private: InterfacePassengerRepository *m_passengerRepository; diff --git a/examples/simple/src/core/persistence/repository/passenger_repository.cpp b/examples/simple/src/core/persistence/repository/passenger_repository.cpp index 77630a07..84e58f49 100644 --- a/examples/simple/src/core/persistence/repository/passenger_repository.cpp +++ b/examples/simple/src/core/persistence/repository/passenger_repository.cpp @@ -23,38 +23,41 @@ SignalHolder *PassengerRepository::signalHolder() return m_signalHolder.data(); } -Result>> PassengerRepository::removeInCascade(QList ids) +Result>> PassengerRepository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash> returnedHashOfEntityWithRemovedIds; // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::Passenger, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert(Simple::Entities::Entities::EntityEnum::Passenger, + removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> PassengerRepository::changeActiveStatusInCascade(QList ids, bool active) +Result>> PassengerRepository::changeActiveStatusInCascade( + QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash> returnedHashOfEntityWithActiveChangedIds; // finally change the entites of this repository Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::Passenger, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert(Simple::Entities::Entities::EntityEnum::Passenger, + changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/examples/simple/src/core/persistence/repository/passenger_repository.h b/examples/simple/src/core/persistence/repository/passenger_repository.h index 98dbff56..344864f0 100644 --- a/examples/simple/src/core/persistence/repository/passenger_repository.h +++ b/examples/simple/src/core/persistence/repository/passenger_repository.h @@ -26,8 +26,9 @@ class SIMPLE_EXAMPLE_PERSISTENCE_EXPORT PassengerRepository final SignalHolder *signalHolder() override; - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, + bool active) override; private: QScopedPointer m_signalHolder; diff --git a/include/qleany/common/error.h b/include/qleany/common/error.h index 76d626c9..b647a60a 100755 --- a/include/qleany/common/error.h +++ b/include/qleany/common/error.h @@ -273,11 +273,11 @@ class QLEANY_EXPORT Error } private: + const char *m_className; + Error::Status m_status; const char *m_code; const char *m_message; const char *m_data; - const char *m_className; - Error::Status m_status; const char *m_file; int m_line; QList m_trace; diff --git a/include/qleany/contracts/repository/interface_generic_repository.h b/include/qleany/contracts/repository/interface_generic_repository.h index 5d4663d3..cd2b2a14 100755 --- a/include/qleany/contracts/repository/interface_generic_repository.h +++ b/include/qleany/contracts/repository/interface_generic_repository.h @@ -23,8 +23,6 @@ template class InterfaceGenericRepository virtual Result> getAll() = 0; virtual Result> getAll(const QHash &filters) = 0; - virtual Result remove(int id) = 0; - virtual Result> remove(QList ids) = 0; virtual Result add(T &&entity) = 0; virtual Result update(T &&entity) = 0; virtual Result exists(int id) = 0; diff --git a/include/qleany/database/database_table_group.h b/include/qleany/database/database_table_group.h index 7ddb14a4..7bb05683 100755 --- a/include/qleany/database/database_table_group.h +++ b/include/qleany/database/database_table_group.h @@ -4,6 +4,7 @@ #include "QtCore/qmetaobject.h" #include "one_to_many_ordered_associator.h" #include "one_to_many_unordered_associator.h" +#include "many_to_many_unordered_associator.h" #include "one_to_one_associator.h" #include "qleany/common/result.h" #include "qleany/contracts/database/interface_database_context.h" @@ -1301,8 +1302,8 @@ Result> DatabaseTableGroup::getEntitiesInRelationOf(const Qleany::En // Many to Many Unordered: else if (relationship.type == Qleany::Entities::RelationshipType::ManyToMany) { - // ManyToManyAssociator associator(m_databaseContext, relationship); - // result = associator.getRelatedEntities(relationship.field); + ManyToManyUnorderedAssociator associator(m_databaseContext, relationship); + result = associator.getRightEntities(leftEntityId); } else { @@ -1348,8 +1349,8 @@ Result> DatabaseTableGroup::updateEntitiesInRelationOf( // Many to Many Unordered: else if (relationship.type == Qleany::Entities::RelationshipType::ManyToMany) { - // ManyToManyAssociator associator(m_databaseContext, relationship); - // result = associator.updateRightEntities(leftEntityId, rightEntities); + ManyToManyUnorderedAssociator associator(m_databaseContext, relationship); + result = associator.updateRightEntities(leftEntityId, rightEntities); } else { diff --git a/include/qleany/database/many_to_many_unordered_associator.h b/include/qleany/database/many_to_many_unordered_associator.h new file mode 100755 index 00000000..2ff9f040 --- /dev/null +++ b/include/qleany/database/many_to_many_unordered_associator.h @@ -0,0 +1,250 @@ +#pragma once + +#include "qleany/contracts/database/interface_database_context.h" +#include "qleany/qleany_export.h" +#include "tools.h" +#include +#include +#include +#include +#include +#include + +using namespace Qleany::Contracts::Database; + +namespace Qleany::Database +{ +template class ManyToManyUnorderedAssociator +{ + public: + ManyToManyUnorderedAssociator(QSharedPointer context, + const Qleany::Entities::RelationshipInfo &relationship) + : m_databaseContext(context), m_relationship(relationship), m_fieldName(relationship.fieldName) + { + + QString leftEntityName = relationship.leftEntityName; + QString rightEntityName = RightEntity::schema.name; + + m_junctionTableName = + leftEntityName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityName + "_junction"_L1; + m_junctionTableLeftEntityForeignKeyName = leftEntityName + "_id"_L1; + m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityName); + m_junctionTableRightEntityForeignKeyName = rightEntityName + "_id"_L1; + m_rightEntityForeignTableName = Qleany::Database::TableTools::getEntityTableName(); + } + ~ManyToManyUnorderedAssociator() = default; + Result> getRightEntities(int leftEntityId); + + QString getTableCreationSql() const; + Result> updateRightEntities(int leftEntityId, const QList &rightEntities); + + private: + Result> getRightEntitiesFromTheirIds(QList rightEntityIds) const; + QStringList getTablePropertyColumns(const Qleany::Entities::EntitySchema &entitySchema) const; + QSharedPointer + m_databaseContext; /**< A QScopedPointer that holds the InterfaceDatabaseContext associated with this + * DatabaseTableGroup. + */ + + QString m_junctionTableName; + QString m_junctionTableLeftEntityForeignKeyName; + QString m_leftEntityForeignTableName; + QString m_junctionTableRightEntityForeignKeyName; + QString m_rightEntityForeignTableName; + Qleany::Entities::RelationshipInfo m_relationship; + Qleany::Entities::EntitySchema m_rightEntitySchema = RightEntity::schema; + const QStringList m_rightEntityPropertyColumns = getTablePropertyColumns(RightEntity::schema); + Qleany::Entities::EntitySchema m_leftEntitySchema; + QString m_fieldName; +}; + +template QString ManyToManyUnorderedAssociator::getTableCreationSql() const +{ + return "CREATE TABLE IF NOT EXISTS %1" + " (id INTEGER PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT UNIQUE ON CONFLICT ROLLBACK NOT NULL ON " + "CONFLICT ROLLBACK, %2 INTEGER NOT NULL, " + "%3 INTEGER NOT NULL ON CONFLICT ROLLBACK, FOREIGN KEY (%4) REFERENCES %5" + " (id) ON DELETE CASCADE, FOREIGN KEY (%6) REFERENCES %7 (id) ON DELETE CASCADE, " + "UNIQUE (%8, %9) ON CONFLICT ROLLBACK);"_L1.arg( + m_junctionTableName, m_junctionTableLeftEntityForeignKeyName, m_junctionTableRightEntityForeignKeyName, + m_junctionTableLeftEntityForeignKeyName, m_leftEntityForeignTableName, + m_junctionTableRightEntityForeignKeyName, m_rightEntityForeignTableName, + m_junctionTableLeftEntityForeignKeyName, m_junctionTableRightEntityForeignKeyName); +} + +template +Result> ManyToManyUnorderedAssociator::getRightEntities(int leftEntityId) +{ + auto connection = m_databaseContext->getConnection(); + + QSqlQuery query(connection); + QString queryStr = "SELECT "_L1 + m_junctionTableRightEntityForeignKeyName + " FROM "_L1 + m_junctionTableName + + " WHERE "_L1 + m_junctionTableLeftEntityForeignKeyName + " = :entityId"_L1; + query.prepare(queryStr); + if (!query.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + query.bindValue(":entityId"_L1, leftEntityId); + if (!query.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + QList rightEntityIds; + while (query.next()) + { + rightEntityIds.append(query.value(0).toInt()); + } + return getRightEntitiesFromTheirIds(rightEntityIds); +} + +template +Result> ManyToManyUnorderedAssociator::updateRightEntities( + int leftEntityId, const QList &rightEntities) +{ + // find all the right entities that are already associated with the left entity, then compare them with the new + // ones, and delete the ones that are not in the new list. Then add the new ones. + auto connection = m_databaseContext->getConnection(); + QSqlQuery query(connection); + QString queryStr = "SELECT "_L1 + m_junctionTableRightEntityForeignKeyName + " FROM "_L1 + m_junctionTableName + + " WHERE "_L1 + m_junctionTableLeftEntityForeignKeyName + " = :entityId"_L1; + query.prepare(queryStr); + if (!query.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + query.bindValue(":entityId"_L1, leftEntityId); + if (!query.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + QList rightEntityIds; + while (query.next()) + { + rightEntityIds.append(query.value(0).toInt()); + } + // delete the ones that are not in the new list + for (int rightEntityId : rightEntityIds) + { + if (!rightEntities.contains(rightEntityId)) + { + QSqlQuery deleteQuery(connection); + QString deleteQueryStr = "DELETE FROM "_L1 + m_junctionTableName + " WHERE "_L1 + + m_junctionTableLeftEntityForeignKeyName + " = :leftEntityId AND "_L1 + + m_junctionTableRightEntityForeignKeyName + " = :rightEntityId"_L1; + deleteQuery.prepare(deleteQueryStr); + deleteQuery.bindValue(":leftEntityId"_L1, leftEntityId); + deleteQuery.bindValue(":rightEntityId"_L1, rightEntityId); + if (!deleteQuery.exec()) + { + return Result>(QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", + deleteQuery.lastError().text(), deleteQueryStr)); + } + } + } + // add the new ones + + for (int rightEntityId : rightEntityIds) + { + QSqlQuery insertQuery(connection); + QString insertQueryStr = + "INSERT INTO "_L1 + m_junctionTableName + " ("_L1 + m_junctionTableLeftEntityForeignKeyName + ", "_L1 + + m_junctionTableRightEntityForeignKeyName + ") VALUES (:leftEntityId, :rightEntityId)"_L1; + insertQuery.prepare(insertQueryStr); + insertQuery.bindValue(":leftEntityId"_L1, leftEntityId); + insertQuery.bindValue(":rightEntityId"_L1, rightEntityId); + if (!insertQuery.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", insertQuery.lastError().text(), insertQueryStr)); + } + } + return getRightEntities(leftEntityId); +} + +//-------------------------------------------- + +template +Result> ManyToManyUnorderedAssociator::getRightEntitiesFromTheirIds( + QList rightEntityIds) const +{ + const QStringList &columns = getTablePropertyColumns(m_rightEntitySchema); + + QSqlDatabase database = m_databaseContext->getConnection(); + QHash columnWithValues; + + QString fields; + for (const QString &column : columns) + { + fields += column + ","_L1; + } + fields.chop(1); + + QList rightEntities; + + QString queryStr = + "SELECT "_L1 + fields + " FROM "_L1 + m_rightEntityForeignTableName + " WHERE "_L1 + "id IN ("_L1; + for (int i = 0; i < rightEntityIds.count(); i++) + { + queryStr += ":id"_L1 + QString::number(i) + ","_L1; + } + queryStr.chop(1); + + queryStr += ")"_L1; + QSqlQuery query(database); + if (!query.prepare(queryStr)) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + for (int i = 0; i < rightEntityIds.count(); i++) + { + query.bindValue(":id"_L1 + QString::number(i), QVariant(rightEntityIds.at(i))); + } + if (!query.exec()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + if (query.lastError().isValid()) + { + return Result>( + QLN_ERROR_3(Q_FUNC_INFO, Error::Critical, "sql_error", query.lastError().text(), queryStr)); + } + + while (query.next()) + { + for (int i = 0; i < columns.count(); i++) + { + columnWithValues.insert(columns.at(i), query.value(i)); + } + rightEntities.append(TableTools::mapToEntity(columnWithValues).value()); + } + + return Result>(rightEntities); +} + +//-------------------------------------------- + +template +QStringList ManyToManyUnorderedAssociator::getTablePropertyColumns( + const Qleany::Entities::EntitySchema &entitySchema) const +{ + QStringList columns; + + for (const auto &field : entitySchema.fields) + { + if (field.isLinkedToAnotherEntity) + { + continue; + } + columns.append(Tools::fromPascalToSnakeCase(field.name)); + } + + return columns; +} +} // namespace Qleany::Database diff --git a/include/qleany/database/one_to_many_ordered_associator.h b/include/qleany/database/one_to_many_ordered_associator.h index c609dcc3..68a0dcbb 100755 --- a/include/qleany/database/one_to_many_ordered_associator.h +++ b/include/qleany/database/one_to_many_ordered_associator.h @@ -22,14 +22,14 @@ template class OneToManyOrderedAssociator : m_databaseContext(context), m_relationship(relationship), m_fieldName(relationship.fieldName) { - QString leftEntityLastName = relationship.leftEntityName; - QString rightEntityLastName = RightEntity::schema.name; + QString leftEntityName = relationship.leftEntityName; + QString rightEntityName = RightEntity::schema.name; m_junctionTableName = - leftEntityLastName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityLastName + "_junction"_L1; - m_junctionTableLeftEntityForeignKeyName = leftEntityLastName + "_id"_L1; - m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityLastName); - m_junctionTableRightEntityForeignKeyName = rightEntityLastName + "_id"_L1; + leftEntityName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityName + "_junction"_L1; + m_junctionTableLeftEntityForeignKeyName = leftEntityName + "_id"_L1; + m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityName); + m_junctionTableRightEntityForeignKeyName = rightEntityName + "_id"_L1; m_rightEntityForeignTableName = Qleany::Database::TableTools::getEntityTableName(); } ~OneToManyOrderedAssociator() = default; diff --git a/include/qleany/database/one_to_many_unordered_associator.h b/include/qleany/database/one_to_many_unordered_associator.h index dad290bc..bb8b8a19 100755 --- a/include/qleany/database/one_to_many_unordered_associator.h +++ b/include/qleany/database/one_to_many_unordered_associator.h @@ -22,14 +22,14 @@ template class OneToManyUnorderedAssociator : m_databaseContext(context), m_relationship(relationship), m_fieldName(relationship.fieldName) { - QString leftEntityLastName = relationship.leftEntityName; - QString rightEntityLastName = RightEntity::schema.name; + QString leftEntityName = relationship.leftEntityName; + QString rightEntityName = RightEntity::schema.name; m_junctionTableName = - leftEntityLastName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityLastName + "_junction"_L1; - m_junctionTableLeftEntityForeignKeyName = leftEntityLastName + "_id"_L1; - m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityLastName); - m_junctionTableRightEntityForeignKeyName = rightEntityLastName + "_id"_L1; + leftEntityName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityName + "_junction"_L1; + m_junctionTableLeftEntityForeignKeyName = leftEntityName + "_id"_L1; + m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityName); + m_junctionTableRightEntityForeignKeyName = rightEntityName + "_id"_L1; m_rightEntityForeignTableName = Qleany::Database::TableTools::getEntityTableName(); } ~OneToManyUnorderedAssociator() = default; @@ -62,15 +62,14 @@ template QString OneToManyUnorderedAssociator:: { return "CREATE TABLE IF NOT EXISTS %1" " (id INTEGER PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT UNIQUE ON CONFLICT ROLLBACK NOT NULL ON " - "CONFLICT ROLLBACK, %2" - " INTEGER NOT NULL, %3" - " INTEGER NOT NULL ON CONFLICT ROLLBACK UNIQUE ON CONFLICT ROLLBACK, FOREIGN KEY (%4) REFERENCES %5" + "CONFLICT ROLLBACK, %2 INTEGER NOT NULL, " + "%3 INTEGER NOT NULL ON CONFLICT ROLLBACK UNIQUE ON CONFLICT ROLLBACK, FOREIGN KEY (%4) REFERENCES %5" " (id) ON DELETE CASCADE, FOREIGN KEY (%6) REFERENCES %7 (id) ON DELETE CASCADE, " - "UNIQUE (%8, %9) ON CONFLICT ROLLBACK);"_L1.arg( + "UNIQUE (%8) ON CONFLICT ROLLBACK);"_L1.arg( m_junctionTableName, m_junctionTableLeftEntityForeignKeyName, m_junctionTableRightEntityForeignKeyName, m_junctionTableLeftEntityForeignKeyName, m_leftEntityForeignTableName, m_junctionTableRightEntityForeignKeyName, m_rightEntityForeignTableName, - m_junctionTableLeftEntityForeignKeyName, m_junctionTableRightEntityForeignKeyName); + m_junctionTableRightEntityForeignKeyName); } template diff --git a/include/qleany/database/one_to_one_associator.h b/include/qleany/database/one_to_one_associator.h index 166fe68d..6c5417a2 100755 --- a/include/qleany/database/one_to_one_associator.h +++ b/include/qleany/database/one_to_one_associator.h @@ -22,14 +22,14 @@ template class OneToOneAssociator : m_databaseContext(context), m_relationship(relationship), m_fieldName(relationship.fieldName) { - QString leftEntityLastName = relationship.leftEntityName; - QString rightEntityLastName = RightEntity::schema.name; + QString leftEntityName = relationship.leftEntityName; + QString rightEntityName = RightEntity::schema.name; m_junctionTableName = - leftEntityLastName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityLastName + "_junction"_L1; - m_junctionTableLeftEntityForeignKeyName = leftEntityLastName + "_id"_L1; - m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityLastName); - m_junctionTableRightEntityForeignKeyName = rightEntityLastName + "_id"_L1; + leftEntityName + "_"_L1 + relationship.fieldName + "_"_L1 + rightEntityName + "_junction"_L1; + m_junctionTableLeftEntityForeignKeyName = leftEntityName + "_id"_L1; + m_leftEntityForeignTableName = Qleany::Database::Tools::fromPascalToSnakeCase(leftEntityName); + m_junctionTableRightEntityForeignKeyName = rightEntityName + "_id"_L1; m_rightEntityForeignTableName = Qleany::Database::TableTools::getEntityTableName(); } ~OneToOneAssociator() = default; diff --git a/include/qleany/repository/generic_repository.h b/include/qleany/repository/generic_repository.h index 87beacbb..91b113d0 100755 --- a/include/qleany/repository/generic_repository.h +++ b/include/qleany/repository/generic_repository.h @@ -34,9 +34,6 @@ template class GenericRepository : public virtual Qleany::Contracts::R virtual Result> getAll() override; Result> getAll(const QHash &filters) override; - virtual Result remove(int id) override; - virtual Result> remove(QList ids) override; - virtual Result add(T &&entity) override; virtual Result update(T &&entity) override; @@ -93,18 +90,6 @@ template Result> GenericRepository::getAll(const QHashgetAll(filters); } -template Result GenericRepository::remove(int id) -{ - QWriteLocker locker(&m_lock); - return databaseTable()->remove(id); -} - -template Result> GenericRepository::remove(QList ids) -{ - QWriteLocker locker(&m_lock); - return databaseTable()->remove(ids); -} - template Result GenericRepository::add(T &&entity) { QWriteLocker locker(&m_lock); diff --git a/tools/qleany/generator/temp/manifest_temp.yaml b/tools/qleany/generator/temp/manifest_temp.yaml index a7807ca1..b28fc3be 100755 --- a/tools/qleany/generator/temp/manifest_temp.yaml +++ b/tools/qleany/generator/temp/manifest_temp.yaml @@ -6,139 +6,154 @@ application: common_cmake_folder_path: src/core/application features: - CRUD: + create: + enabled: true enabled: true - entity_mappable_with: Root + entity_mappable_with: Car get: enabled: true + get_all: + enabled: true + get_with_details: + enabled: true + insert_relation: + enabled: true + remove: + enabled: true + update: + enabled: true DTO: dto_identical_to_entity: enabled: true - entity_mappable_with: Root - name: Root + entity_mappable_with: Car + name: Car - CRUD: + change_active_status: + enabled: true + create: + enabled: true enabled: true - entity_mappable_with: RecentProject + entity_mappable_with: Brand get: enabled: true get_all: enabled: true + get_with_details: + enabled: false remove: enabled: true + update: + enabled: true DTO: dto_identical_to_entity: enabled: true - entity_mappable_with: RecentProject - name: RecentProject + entity_mappable_with: Brand + name: Brand - CRUD: + change_active_status: + enabled: true + create: + enabled: true enabled: true - entity_mappable_with: Project + entity_mappable_with: Passenger get: enabled: true + get_all: + enabled: true + get_with_details: + enabled: false + remove: + enabled: true + update: + enabled: true DTO: dto_identical_to_entity: enabled: true - entity_mappable_with: Project + entity_mappable_with: Passenger + name: Passenger + - CRUD: + create: + enabled: true + enabled: true + entity_mappable_with: Client + get: + enabled: true + get_all: + enabled: true + get_with_details: + enabled: true + insert_relation: + enabled: true + remove: + enabled: true + update: + enabled: true + DTO: + dto_identical_to_entity: + enabled: true + entity_mappable_with: Client + name: Client + - CRUD: + enabled: false + DTO: + dto_identical_to_entity: + enabled: false commands: - dto: in: fields: - - name: fileName + - name: randomCarName type: QString - type_prefix: LoadProject + type_prefix: WriteRandomThings out: enabled: false entities: - - Project - - GlobalComponent - - RecentProject - name: LoadProject + - Car + - Passenger + - Brand + - Client + name: WriteRandomThings undo: false validator: enabled: true - dto: in: - fields: - - name: fileName - type: QString - type_prefix: SaveProject + enabled: false out: enabled: false - entities: - - Project - - GlobalComponent - name: SaveProject + minimum_progress_time: 1000 + name: RunLongOperation undo: false validator: - enabled: true + enabled: false - dto: in: - fields: - - name: fileName - type: QString - type_prefix: CreateProject + enabled: false out: enabled: false entities: - - Project - - GlobalComponent - name: CreateProject + - Car + - Passenger + - Brand + - Client + name: CloseSystem undo: false validator: - enabled: true + enabled: false + name: Custom + queries: - dto: in: enabled: false out: - enabled: false - entities: - - Project - name: CloseProject + fields: + - name: currentDateTime + type: QDateTime + type_prefix: GetCurrentTimeReply + name: GetCurrentTime undo: false validator: enabled: false - name: Project - - CRUD: - enabled: true - entity_mappable_with: GlobalComponent - get: - enabled: true - update: - enabled: true - DTO: - dto_identical_to_entity: - enabled: true - entity_mappable_with: GlobalComponent - name: GlobalComponent - - CRUD: - enabled: true - entity_mappable_with: EntityComponent - get: - enabled: true - get_with_details: - enabled: true - update: - enabled: true - DTO: - dto_identical_to_entity: - enabled: true - entity_mappable_with: EntityComponent - name: EntityComponent - - CRUD: - create: - enabled: true - enabled: true - entity_mappable_with: Entity - get: - enabled: true - remove: - enabled: true - update: - enabled: true - DTO: - dto_identical_to_entity: - enabled: true - entity_mappable_with: Entity - name: Entity contracts: folder_path: src/core/contracts inverted_app_domain: eu.qleany @@ -152,108 +167,89 @@ entities: type: QDateTime - name: updateDate type: QDateTime - name: CommonParent + name: Entity only_for_heritage: true parent: EntityBase - fields: - name: content type: QString - - name: rootPath - type: QString - - name: recentProjects - ordered: false + - name: brand strong: true - type: QList - - name: project - strong: true - type: Project - name: Root - parent: CommonParent - - fields: - - name: fileName - type: QString - - name: rootPath - type: QString - name: RecentProject - parent: CommonParent - - fields: - - name: fileName - type: QString - - name: globalComponent + type: Brand + - name: passengers + ordered: true strong: true - type: GlobalComponent - name: Project - parent: CommonParent + type: QList + name: Car + parent: Entity - fields: - - name: applicationName - type: QString - - name: applicationCppDomainName - type: QString - - name: organisationName - type: QString - - name: organisationDomain - type: QString - name: GlobalComponent - parent: CommonParent - - fields: - - name: relativeFolderPath + - name: name type: QString - - name: entities - ordered: true - strong: true - type: QList - name: EntityComponent - parent: CommonParent + name: Brand + parent: Entity - fields: - name: name type: QString - name: Entity - parent: CommonParent + name: Passenger + parent: Entity + - fields: + - name: client + ordered: false + strong: false + type: Passenger + - name: clientFriends + type: QList + name: Client + parent: Entity front_ends: + kf6_kirigami: + folder_path: src/gui/kf6_kirigami_application/ qml_imports_integration: - folder_path: src/ui/kirigami/ + folder_path: src/gui/qt_design_studio/ + qt_quick: + folder_path: src/gui/qt_quick_application/ + qt_widgets: + folder_path: src/gui/qt_widgets_application/ global: - application_cpp_domain_name: QleanyEditor - application_name: qleany-editor + application_cpp_domain_name: FrontEnds + application_name: FrontEndsExample organisation: domain: qleany.eu - name: qleany + name: frontendsexample interactor: - create_undo_redo_interactor: false + create_undo_redo_interactor: true folder_path: src/core/interactor/ presenter: - create_undo_and_redo_singles: false - folder_path: src/ui/presenter + create_undo_and_redo_singles: true + folder_path: src/gui/presenter list_models: - - displayed_field: rootPath - entity: RecentProject - name: auto - read_only: true - displayed_field: name - entity: Entity - in_relation_of: EntityComponent - name: auto - relation_field_name: entities + entity: Passenger + in_relation_of: Car + name: PassengerListModelFromCarPassengers + relation_field_name: passengers + - displayed_field: content + entity: Car + name: CarListModel singles: - - entity: Project + - entity: Car + name: SingleCar + - entity: Brand name: auto - read_only: true - - entity: GlobalComponent + - entity: Passenger + name: auto + - entity: Client name: auto repositories: base_folder_path: src/core/persistence/ list: - - entity_name: Root - lazy_loaders: true - - entity_name: RecentProject - lazy_loaders: true - - entity_name: Project + - entity_name: Car lazy_loaders: true - - entity_name: GlobalComponent + - entity_name: Brand lazy_loaders: true - - entity_name: EntityComponent + - entity_name: Passenger lazy_loaders: true - - entity_name: Entity + - entity_name: Client lazy_loaders: true repository_folder_path: src/core/persistence/repository/ schema: diff --git a/tools/qleany/generator/templates/application/CRUD/create_handler.cpp.jinja2 b/tools/qleany/generator/templates/application/CRUD/create_handler.cpp.jinja2 index c858f4fb..5d4fc591 100755 --- a/tools/qleany/generator/templates/application/CRUD/create_handler.cpp.jinja2 +++ b/tools/qleany/generator/templates/application/CRUD/create_handler.cpp.jinja2 @@ -219,11 +219,11 @@ Result<{{ entity_mappable_with_pascal }}DTO>Create{{ entity_mappable_with_pascal Result<{{ entity_mappable_with_pascal }}DTO>Create{{ entity_mappable_with_pascal }}CommandHandler::restoreImpl() { int entityId = m_newEntity.value().id(); - auto deleteResult = m_repository->remove(entityId); + auto deleteResult = m_repository->remove(QList() << entityId); QLN_RETURN_IF_ERROR({{ entity_mappable_with_pascal }}DTO, deleteResult) - Q_EMIT {{ entity_mappable_with_camel }}Removed(deleteResult.value()); + Q_EMIT {{ entity_mappable_with_camel }}Removed(deleteResult.value().value({{ application_cpp_domain_name }}::Entities::Entities::EntityEnum::{{ entity_mappable_with_pascal }}).first()); qDebug() << "{{ entity_mappable_with_pascal }} removed:" << deleteResult.value(); diff --git a/tools/qleany/generator/templates/application/CRUD/remove_handler.cpp.jinja2 b/tools/qleany/generator/templates/application/CRUD/remove_handler.cpp.jinja2 index 3ad2d326..aa3c9b1b 100755 --- a/tools/qleany/generator/templates/application/CRUD/remove_handler.cpp.jinja2 +++ b/tools/qleany/generator/templates/application/CRUD/remove_handler.cpp.jinja2 @@ -75,7 +75,7 @@ ResultRemove{{ entity_mappable_with_pascal }}CommandHandler::handleImpl(QPr // save old entity m_oldState = {{ entity_mappable_with_camel }}Result.value(); - auto deleteResult = m_repository->removeInCascade(QList() << {{ entity_mappable_with_camel }}Id); + auto deleteResult = m_repository->remove(QList() << {{ entity_mappable_with_camel }}Id); QLN_RETURN_IF_ERROR(int, deleteResult) diff --git a/tools/qleany/generator/templates/repositories/interface_repository_template.h.jinja2 b/tools/qleany/generator/templates/repositories/interface_repository_template.h.jinja2 index a4cf28b1..a8283e18 100755 --- a/tools/qleany/generator/templates/repositories/interface_repository_template.h.jinja2 +++ b/tools/qleany/generator/templates/repositories/interface_repository_template.h.jinja2 @@ -29,8 +29,8 @@ class {{ contracts_export }} Interface{{ name }}Repository {% for loader_function in loader_function_list_for_interface %} {{ loader_function }} {% endfor %} - virtual Result>> removeInCascade(QList ids) = 0; - virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; + virtual Result>> remove(QList ids) = 0; + virtual Result>> changeActiveStatusInCascade(QList ids, bool active) = 0; }; diff --git a/tools/qleany/generator/templates/repositories/repository_template.cpp.jinja2 b/tools/qleany/generator/templates/repositories/repository_template.cpp.jinja2 index f0d9b5a7..45a2675b 100755 --- a/tools/qleany/generator/templates/repositories/repository_template.cpp.jinja2 +++ b/tools/qleany/generator/templates/repositories/repository_template.cpp.jinja2 @@ -137,17 +137,17 @@ Result<{{ application_cpp_domain_name }}::Entities::{{ name }}> {{ name }}Reposi -Result>> {{ name }}Repository::removeInCascade(QList ids) +Result>> {{ name }}Repository::remove(QList ids) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithRemovedIds; + QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum, QList> returnedHashOfEntityWithRemovedIds; {% for key, value in foreign_entities.items() %} // remove the {{ value["related_field_name"] }} in cascade Qleany::Entities::RelationshipInfo {{ value["type_camel_name"] }}{{ value["related_field_pascal_name"] }}Relationship; for(const Qleany::Entities::RelationshipInfo &relationship : {{ application_cpp_domain_name }}::Entities::{{ name }}::schema.relationships ){ - if(relationship.rightEntityId == {{ application_cpp_domain_name }}::Entities::Entities::{{ value["type_pascal_name"] }} && relationship.fieldName == "{{ value["related_field_name"] }}"_L1){ + if(relationship.rightEntityId == {{ application_cpp_domain_name }}::Entities::Entities::EntityEnum::{{ value["type_pascal_name"] }} && relationship.fieldName == "{{ value["related_field_name"] }}"_L1){ {{ value["type_camel_name"] }}{{ value["related_field_pascal_name"] }}Relationship = relationship; break; } @@ -204,8 +204,8 @@ Result>> {{ name }}Repository::removeInCascade(QList foreignIds.append(foreign{{ value["related_field_pascal_name"] }}.id()); {% endif %} - auto removalResult = m_{{ value["type_camel_name"] }}Repository->removeInCascade(foreignIds); - QLN_RETURN_IF_ERROR(QHash>, removalResult) + auto removalResult = m_{{ value["type_camel_name"] }}Repository->remove(foreignIds); + QLN_RETURN_IF_ERROR(QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum QLN_COMMA QList>, removalResult) returnedHashOfEntityWithRemovedIds.insert(removalResult.value()); } @@ -215,28 +215,28 @@ Result>> {{ name }}Repository::removeInCascade(QList // finally remove the entites of this repository Result associationRemovalResult = this->databaseTable()->removeAssociationsWith(ids); - QLN_RETURN_IF_ERROR(QHash>, associationRemovalResult) + QLN_RETURN_IF_ERROR(QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum QLN_COMMA QList>, associationRemovalResult) Result> removedIdsResult = this->databaseTable()->remove(ids); - QLN_RETURN_IF_ERROR(QHash>, removedIdsResult) + QLN_RETURN_IF_ERROR(QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum QLN_COMMA QList>, removedIdsResult) - returnedHashOfEntityWithRemovedIds.insert({{ application_cpp_domain_name }}::Entities::Entities::{{ name }}, removedIdsResult.value()); + returnedHashOfEntityWithRemovedIds.insert({{ application_cpp_domain_name }}::Entities::Entities::EntityEnum::{{ name }}, removedIdsResult.value()); Q_EMIT m_signalHolder->removed(removedIdsResult.value()); - return Result>>(returnedHashOfEntityWithRemovedIds); + return Result>>(returnedHashOfEntityWithRemovedIds); } -Result>> {{ name }}Repository::changeActiveStatusInCascade(QList ids, bool active) +Result>> {{ name }}Repository::changeActiveStatusInCascade(QList ids, bool active) { QWriteLocker locker(&m_lock); - QHash> returnedHashOfEntityWithActiveChangedIds; + QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum, QList> returnedHashOfEntityWithActiveChangedIds; {% for key, value in foreign_entities.items() %} // cahnge active status of the {{ value["related_field_name"] }} in cascade Qleany::Entities::RelationshipInfo {{ value["type_camel_name"] }}{{ value["related_field_pascal_name"] }}Relationship; for(const Qleany::Entities::RelationshipInfo &relationship : {{ application_cpp_domain_name }}::Entities::{{ name }}::schema.relationships ){ - if(relationship.rightEntityId == {{ application_cpp_domain_name }}::Entities::Entities::{{ value["type_pascal_name"] }} && relationship.fieldName == QString::fromLatin1("{{ value["related_field_name"] }}") ){ + if(relationship.rightEntityId == {{ application_cpp_domain_name }}::Entities::Entities::EntityEnum::{{ value["type_pascal_name"] }} && relationship.fieldName == QString::fromLatin1("{{ value["related_field_name"] }}") ){ {{ value["type_camel_name"] }}{{ value["related_field_pascal_name"] }}Relationship = relationship; break; } @@ -294,7 +294,7 @@ Result>> {{ name }}Repository::changeActiveStatusInCascade auto changeResult = m_{{ value["type_camel_name"] }}Repository->changeActiveStatusInCascade(foreignIds, active); - QLN_RETURN_IF_ERROR(QHash>, changeResult) + QLN_RETURN_IF_ERROR(QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum QLN_COMMA QList>, changeResult) returnedHashOfEntityWithActiveChangedIds.insert(changeResult.value()); } @@ -305,10 +305,10 @@ Result>> {{ name }}Repository::changeActiveStatusInCascade Result> changedIdsResult = this->databaseTable()->changeActiveStatus(ids, active); - QLN_RETURN_IF_ERROR(QHash>, changedIdsResult) + QLN_RETURN_IF_ERROR(QHash<{{ application_cpp_domain_name }}::Entities::Entities::EntityEnum QLN_COMMA QList>, changedIdsResult) - returnedHashOfEntityWithActiveChangedIds.insert({{ application_cpp_domain_name }}::Entities::Entities::{{ name }}, changedIdsResult.value()); + returnedHashOfEntityWithActiveChangedIds.insert({{ application_cpp_domain_name }}::Entities::Entities::EntityEnum::{{ name }}, changedIdsResult.value()); Q_EMIT m_signalHolder->activeStatusChanged(changedIdsResult.value(), active); - return Result>>(returnedHashOfEntityWithActiveChangedIds); + return Result>>(returnedHashOfEntityWithActiveChangedIds); } \ No newline at end of file diff --git a/tools/qleany/generator/templates/repositories/repository_template.h.jinja2 b/tools/qleany/generator/templates/repositories/repository_template.h.jinja2 index aa924b3a..1adfaad8 100755 --- a/tools/qleany/generator/templates/repositories/repository_template.h.jinja2 +++ b/tools/qleany/generator/templates/repositories/repository_template.h.jinja2 @@ -34,8 +34,8 @@ class {{ export }} {{ name }}Repository final : public Qleany::Repository::Gene {% for loader_function in loader_function_list %} {{ loader_function }} {% endfor %} - Result>> removeInCascade(QList ids) override; - Result>> changeActiveStatusInCascade(QList ids, bool active) override; + Result>> remove(QList ids) override; + Result>> changeActiveStatusInCascade(QList ids, bool active) override; private: diff --git a/tools/qleany/generator/templates/root/CMakeLists.txt.jinja2 b/tools/qleany/generator/templates/root/CMakeLists.txt.jinja2 index 54c39aa0..00b6d393 100644 --- a/tools/qleany/generator/templates/root/CMakeLists.txt.jinja2 +++ b/tools/qleany/generator/templates/root/CMakeLists.txt.jinja2 @@ -121,7 +121,7 @@ endif() {% if front_ends.kf6_kirigami.enabled -%} if(BUILD_KF6_KIRIGAMI) - find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 CoreAddons Config I18n) + find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami CoreAddons Config I18n) if(ANDROID) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/android/version.gradle.in ${CMAKE_BINARY_DIR}/version.gradle) diff --git a/tools/qleany/generator/templates/root/kf6_kirigami/CMakeLists.txt.jinja2 b/tools/qleany/generator/templates/root/kf6_kirigami/CMakeLists.txt.jinja2 index 41462789..d1235628 100644 --- a/tools/qleany/generator/templates/root/kf6_kirigami/CMakeLists.txt.jinja2 +++ b/tools/qleany/generator/templates/root/kf6_kirigami/CMakeLists.txt.jinja2 @@ -43,7 +43,7 @@ if(NOT ANDROID) endif() find_package(Qt6 ${QT6_MIN_VERSION} REQUIRED COMPONENTS Core Gui Qml QuickControls2 Svg Sql Concurrent ${QT_EXTRA_COMPONENTS}) -find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 CoreAddons Config I18n) +find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS Kirigami CoreAddons Config I18n) # Add QCoro find_package(QCoro6 REQUIRED COMPONENTS Core)