From 3a63b9dfcf6e35cab5f00c04593d2775211421da Mon Sep 17 00:00:00 2001 From: chodak166 Date: Sat, 9 Aug 2025 14:45:03 +0200 Subject: [PATCH] WIP: cpp17 --- cpp17/lib/CMakeLists.txt | 7 ++-- cpp17/lib/include/autostore/AutoStore.h | 6 ++-- .../include/autostore/domain/entities/User.h | 18 ---------- cpp17/lib/src/AutoStore.cpp | 6 ++-- .../lib/src/application/commands/AddItem.cpp | 15 ++++++++ cpp17/lib/src/application/commands/AddItem.h | 25 ++++++++++++++ .../application/interfaces/IAuthService.h | 8 ++--- .../application/interfaces/IItemRepository.h | 8 ++--- .../application/interfaces/IUserRepository.h | 8 ++--- .../presenters/GenericPresenters.h | 34 +++++++++++++++++++ .../autostore => src}/domain/entities/Item.h | 14 ++++---- cpp17/lib/src/domain/entities/User.h | 15 ++++++++ .../repositories/FileItemRepository.cpp | 8 ++--- .../repositories/FileItemRepository.h | 8 ++--- .../repositories/FileUserRepository.cpp | 8 ++--- .../repositories/FileUserRepository.h | 8 ++--- cpp17/tests/CMakeLists.txt | 1 + .../integration/FileItemRepository.test.cpp | 4 +-- .../integration/FileUserRepository.test.cpp | 4 +-- 19 files changed, 120 insertions(+), 85 deletions(-) delete mode 100644 cpp17/lib/include/autostore/domain/entities/User.h create mode 100644 cpp17/lib/src/application/commands/AddItem.cpp create mode 100644 cpp17/lib/src/application/commands/AddItem.h rename cpp17/lib/{include/autostore => src}/application/interfaces/IAuthService.h (68%) rename cpp17/lib/{include/autostore => src}/application/interfaces/IItemRepository.h (79%) rename cpp17/lib/{include/autostore => src}/application/interfaces/IUserRepository.h (79%) create mode 100644 cpp17/lib/src/application/presenters/GenericPresenters.h rename cpp17/lib/{include/autostore => src}/domain/entities/Item.h (51%) create mode 100644 cpp17/lib/src/domain/entities/User.h rename cpp17/lib/{include/autostore => src}/infrastructure/repositories/FileItemRepository.h (82%) rename cpp17/lib/{include/autostore => src}/infrastructure/repositories/FileUserRepository.h (82%) diff --git a/cpp17/lib/CMakeLists.txt b/cpp17/lib/CMakeLists.txt index 4f504eb..7d40b34 100644 --- a/cpp17/lib/CMakeLists.txt +++ b/cpp17/lib/CMakeLists.txt @@ -15,6 +15,8 @@ add_library(${TARGET_NAME} STATIC target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/autostore + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_sources(${TARGET_NAME} @@ -23,11 +25,6 @@ target_sources(${TARGET_NAME} BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include FILES include/autostore/AutoStore.h - include/autostore/domain/entities/User.h - include/autostore/domain/entities/Item.h - include/autostore/application/interfaces/IUserRepository.h - include/autostore/application/interfaces/IItemRepository.h - include/autostore/application/interfaces/IAuthService.h ) # Find dependencies diff --git a/cpp17/lib/include/autostore/AutoStore.h b/cpp17/lib/include/autostore/AutoStore.h index 6b701ba..245e88c 100644 --- a/cpp17/lib/include/autostore/AutoStore.h +++ b/cpp17/lib/include/autostore/AutoStore.h @@ -4,8 +4,7 @@ #include #include -namespace nxl { -namespace autostore { +namespace nxl::autostore { class AutoStore { @@ -27,5 +26,4 @@ private: bool initialized; }; -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore \ No newline at end of file diff --git a/cpp17/lib/include/autostore/domain/entities/User.h b/cpp17/lib/include/autostore/domain/entities/User.h deleted file mode 100644 index f28f1d2..0000000 --- a/cpp17/lib/include/autostore/domain/entities/User.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include - -namespace nxl { -namespace autostore { -namespace domain { - -struct User -{ - std::string id; - std::string username; - std::string passwordHash; -}; - -} // namespace domain -} // namespace autostore -} // namespace nxl \ No newline at end of file diff --git a/cpp17/lib/src/AutoStore.cpp b/cpp17/lib/src/AutoStore.cpp index b57139e..87e9c46 100644 --- a/cpp17/lib/src/AutoStore.cpp +++ b/cpp17/lib/src/AutoStore.cpp @@ -1,8 +1,7 @@ #include "autostore/AutoStore.h" #include -namespace nxl { -namespace autostore { +namespace nxl::autostore { AutoStore::AutoStore(std::string_view dataPath) : dataPath(dataPath), initialized(false) @@ -39,5 +38,4 @@ void AutoStore::stop() std::cout << "Stopping AutoStore services..." << std::endl; } -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore \ No newline at end of file diff --git a/cpp17/lib/src/application/commands/AddItem.cpp b/cpp17/lib/src/application/commands/AddItem.cpp new file mode 100644 index 0000000..94a0162 --- /dev/null +++ b/cpp17/lib/src/application/commands/AddItem.cpp @@ -0,0 +1,15 @@ +#include "AddItem.h" +#include "domain/polices/ItemExpirationPolicy.h" + +namespace nxl::autostore::application { + +AddItem::AddItem(IItemRepository& itemRepository) + : itemRepository(itemRepository) +{} + +void AddItem::execute(domain::Item&& item, const IntPresenter& presenter) +{ + // TODO +} + +} // namespace nxl::autostore::application \ No newline at end of file diff --git a/cpp17/lib/src/application/commands/AddItem.h b/cpp17/lib/src/application/commands/AddItem.h new file mode 100644 index 0000000..8296677 --- /dev/null +++ b/cpp17/lib/src/application/commands/AddItem.h @@ -0,0 +1,25 @@ +#pragma once + +#include "domain/entities/Item.h" +#include "application/interfaces/IItemRepository.h" +#include "application/presenters/GenericPresenters.h" + +namespace nxl { +namespace autostore { +namespace application { + +class AddItem +{ +public: + virtual ~AddItem() = default; + + AddItem(IItemRepository& itemRepository); + void execute(domain::Item&& item, const IntPresenter& presenter); + +private: + IItemRepository& itemRepository; +}; + +} // namespace application +} // namespace autostore +} // namespace nxl \ No newline at end of file diff --git a/cpp17/lib/include/autostore/application/interfaces/IAuthService.h b/cpp17/lib/src/application/interfaces/IAuthService.h similarity index 68% rename from cpp17/lib/include/autostore/application/interfaces/IAuthService.h rename to cpp17/lib/src/application/interfaces/IAuthService.h index cd74605..3189bd1 100644 --- a/cpp17/lib/include/autostore/application/interfaces/IAuthService.h +++ b/cpp17/lib/src/application/interfaces/IAuthService.h @@ -4,9 +4,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace application { +namespace nxl::autostore::application { class IAuthService { @@ -16,6 +14,4 @@ public: virtual std::optional validateToken(std::string_view token) = 0; }; -} // namespace application -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::application \ No newline at end of file diff --git a/cpp17/lib/include/autostore/application/interfaces/IItemRepository.h b/cpp17/lib/src/application/interfaces/IItemRepository.h similarity index 79% rename from cpp17/lib/include/autostore/application/interfaces/IItemRepository.h rename to cpp17/lib/src/application/interfaces/IItemRepository.h index a0d0efd..d117eb7 100644 --- a/cpp17/lib/include/autostore/application/interfaces/IItemRepository.h +++ b/cpp17/lib/src/application/interfaces/IItemRepository.h @@ -6,9 +6,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace application { +namespace nxl::autostore::application { class IItemRepository { @@ -21,6 +19,4 @@ public: virtual void remove(std::string_view id) = 0; }; -} // namespace application -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::application \ No newline at end of file diff --git a/cpp17/lib/include/autostore/application/interfaces/IUserRepository.h b/cpp17/lib/src/application/interfaces/IUserRepository.h similarity index 79% rename from cpp17/lib/include/autostore/application/interfaces/IUserRepository.h rename to cpp17/lib/src/application/interfaces/IUserRepository.h index 59641c8..a9cb85c 100644 --- a/cpp17/lib/include/autostore/application/interfaces/IUserRepository.h +++ b/cpp17/lib/src/application/interfaces/IUserRepository.h @@ -6,9 +6,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace application { +namespace nxl::autostore::application { class IUserRepository { @@ -22,6 +20,4 @@ public: virtual void remove(std::string_view id) = 0; }; -} // namespace application -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::application \ No newline at end of file diff --git a/cpp17/lib/src/application/presenters/GenericPresenters.h b/cpp17/lib/src/application/presenters/GenericPresenters.h new file mode 100644 index 0000000..203ea7f --- /dev/null +++ b/cpp17/lib/src/application/presenters/GenericPresenters.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include + +namespace nxl::autostore::application { + +struct OpResult +{ + bool success; + std::string message; + + bool operator==(const OpResult& other) const + { + return success == other.success && message == other.message; + } +}; + +struct ErrorResult : public OpResult +{ + ErrorResult(std::string message) : OpResult({false, message}) {} +}; + +struct SuccessResult : public OpResult +{ + SuccessResult(std::string message) : OpResult({true, message}) {} +}; + +using BoolPresenter = std::function; +using IntPresenter = std::function; +using DoublePresenter = std::function; +using StringPresenter = std::function; + +} // namespace nxl::autostore::application \ No newline at end of file diff --git a/cpp17/lib/include/autostore/domain/entities/Item.h b/cpp17/lib/src/domain/entities/Item.h similarity index 51% rename from cpp17/lib/include/autostore/domain/entities/Item.h rename to cpp17/lib/src/domain/entities/Item.h index 04d1e35..021eafe 100644 --- a/cpp17/lib/include/autostore/domain/entities/Item.h +++ b/cpp17/lib/src/domain/entities/Item.h @@ -1,21 +1,19 @@ #pragma once +#include "User.h" #include #include -namespace nxl { -namespace autostore { -namespace domain { +namespace nxl::autostore::domain { struct Item { - std::string id; + using Id_t = std::string; + Id_t id; std::string name; std::chrono::system_clock::time_point expirationDate; std::string orderUrl; - std::string userId; + User::Id_t userId; }; -} // namespace domain -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::domain \ No newline at end of file diff --git a/cpp17/lib/src/domain/entities/User.h b/cpp17/lib/src/domain/entities/User.h new file mode 100644 index 0000000..e515b0a --- /dev/null +++ b/cpp17/lib/src/domain/entities/User.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace nxl::autostore::domain { + +struct User +{ + using Id_t = std::string; + Id_t id; + std::string username; + std::string passwordHash; +}; + +} // namespace nxl::autostore::domain \ No newline at end of file diff --git a/cpp17/lib/src/infrastructure/repositories/FileItemRepository.cpp b/cpp17/lib/src/infrastructure/repositories/FileItemRepository.cpp index cde7a8f..351c3f3 100644 --- a/cpp17/lib/src/infrastructure/repositories/FileItemRepository.cpp +++ b/cpp17/lib/src/infrastructure/repositories/FileItemRepository.cpp @@ -6,9 +6,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace infrastructure { +namespace nxl::autostore::infrastructure { namespace { @@ -137,6 +135,4 @@ void FileItemRepository::persist() } } -} // namespace infrastructure -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::infrastructure \ No newline at end of file diff --git a/cpp17/lib/include/autostore/infrastructure/repositories/FileItemRepository.h b/cpp17/lib/src/infrastructure/repositories/FileItemRepository.h similarity index 82% rename from cpp17/lib/include/autostore/infrastructure/repositories/FileItemRepository.h rename to cpp17/lib/src/infrastructure/repositories/FileItemRepository.h index 4be0415..c091856 100644 --- a/cpp17/lib/include/autostore/infrastructure/repositories/FileItemRepository.h +++ b/cpp17/lib/src/infrastructure/repositories/FileItemRepository.h @@ -5,9 +5,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace infrastructure { +namespace nxl::autostore::infrastructure { class FileItemRepository : public application::IItemRepository { @@ -28,6 +26,4 @@ private: std::mutex mtx; }; -} // namespace infrastructure -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::infrastructure \ No newline at end of file diff --git a/cpp17/lib/src/infrastructure/repositories/FileUserRepository.cpp b/cpp17/lib/src/infrastructure/repositories/FileUserRepository.cpp index 0073699..18c5f8a 100644 --- a/cpp17/lib/src/infrastructure/repositories/FileUserRepository.cpp +++ b/cpp17/lib/src/infrastructure/repositories/FileUserRepository.cpp @@ -3,9 +3,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace infrastructure { +namespace nxl::autostore::infrastructure { namespace { @@ -129,6 +127,4 @@ void FileUserRepository::persist() } } -} // namespace infrastructure -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::infrastructure \ No newline at end of file diff --git a/cpp17/lib/include/autostore/infrastructure/repositories/FileUserRepository.h b/cpp17/lib/src/infrastructure/repositories/FileUserRepository.h similarity index 82% rename from cpp17/lib/include/autostore/infrastructure/repositories/FileUserRepository.h rename to cpp17/lib/src/infrastructure/repositories/FileUserRepository.h index 8594ff8..5edd987 100644 --- a/cpp17/lib/include/autostore/infrastructure/repositories/FileUserRepository.h +++ b/cpp17/lib/src/infrastructure/repositories/FileUserRepository.h @@ -5,9 +5,7 @@ #include #include -namespace nxl { -namespace autostore { -namespace infrastructure { +namespace nxl::autostore::infrastructure { class FileUserRepository : public application::IUserRepository { @@ -29,6 +27,4 @@ private: std::mutex mtx; }; -} // namespace infrastructure -} // namespace autostore -} // namespace nxl \ No newline at end of file +} // namespace nxl::autostore::infrastructure \ No newline at end of file diff --git a/cpp17/tests/CMakeLists.txt b/cpp17/tests/CMakeLists.txt index 6c96b08..b5c34a9 100644 --- a/cpp17/tests/CMakeLists.txt +++ b/cpp17/tests/CMakeLists.txt @@ -19,6 +19,7 @@ function(add_integration_test TEST_NAME SOURCE_FILE) target_include_directories(${TEST_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/lib/include + ${PROJECT_SOURCE_DIR}/lib/src ) # Add test to CTest diff --git a/cpp17/tests/integration/FileItemRepository.test.cpp b/cpp17/tests/integration/FileItemRepository.test.cpp index fe38b7b..3585960 100644 --- a/cpp17/tests/integration/FileItemRepository.test.cpp +++ b/cpp17/tests/integration/FileItemRepository.test.cpp @@ -1,7 +1,7 @@ +#include "infrastructure/repositories/FileItemRepository.h" +#include "domain/entities/Item.h" #include #include -#include -#include #include #include #include diff --git a/cpp17/tests/integration/FileUserRepository.test.cpp b/cpp17/tests/integration/FileUserRepository.test.cpp index e43716d..b33d2cf 100644 --- a/cpp17/tests/integration/FileUserRepository.test.cpp +++ b/cpp17/tests/integration/FileUserRepository.test.cpp @@ -1,7 +1,7 @@ +#include "infrastructure/repositories/FileUserRepository.h" +#include "domain/entities/User.h" #include #include -#include -#include #include #include #include