#pragma once #include #include #include #include #include #include "../Entities/EntityInterface.h" #include "../Enums/EntityStateEnum.h" namespace L2Bot::Domain::Services { class UnitOfWork { public: const std::unordered_map ConnectEntities(const std::wstring& name, const std::unordered_map>& entites) { std::unordered_map result; auto& hashes = m_Hashes[name]; for (const auto& kvp : entites) { const auto &entity = kvp.second; if (hashes.size() == 0) { result[entity->GetId()] = Enums::EntityStateEnum::created; } else { if (hashes.find(entity->GetId()) == hashes.end()) { result[entity->GetId()] = Enums::EntityStateEnum::created; } else if (hashes[entity->GetId()] != entity->GetHash()) { result[entity->GetId()] = Enums::EntityStateEnum::updated; } } hashes[entity->GetId()] = entity->GetHash(); } for (auto it = hashes.begin(); it != hashes.end();) { if (entites.find(it->first) == entites.end()) { result[it->first] = Enums::EntityStateEnum::deleted; it = hashes.erase(it); } else { ++it; } } return result; } private: std::unordered_map > m_Hashes; }; }