From 43e721305c866ad4b2c4c35d1133f169e41dd49b Mon Sep 17 00:00:00 2001 From: claiff Date: Wed, 5 Oct 2022 15:57:43 +0300 Subject: file reader/writer split by decorators --- src/management/builder/mail.cpp | 20 +++++++++---- src/management/builder/mail.hpp | 3 ++ src/management/builder/settings.cpp | 27 ++++++++++-------- src/management/builder/settings.hpp | 4 +-- src/management/mail.cpp | 56 ++++++++++++++++++------------------- src/management/mail.hpp | 14 +++++----- src/management/settings.cpp | 2 +- src/management/settings.hpp | 6 ++-- 8 files changed, 72 insertions(+), 60 deletions(-) (limited to 'src/management') diff --git a/src/management/builder/mail.cpp b/src/management/builder/mail.cpp index a301f5b..a96fd33 100644 --- a/src/management/builder/mail.cpp +++ b/src/management/builder/mail.cpp @@ -1,19 +1,27 @@ #include "mail.hpp" -#include "file/mail.hpp" #include "checker/errors/mail/empty.hpp" #include "checker/errors/mail/at_sign.hpp" +#include "file/mail/file_decorator.hpp" +#include "file/mail/checker_decorator.hpp" +#include "file/mail/sort_decorator.hpp" + namespace smtp::manage::builder { smtp::manage::Mail Mail::Build() const { - static const std::string PATH = {"/var/lib/smtp/mails.txt"}; + return smtp::manage::Mail{BuildFileManipulator()}; + } - auto registrator = BuildErrorRegistrator(); - file::Mail file_manipulator{PATH, registrator}; - return smtp::manage::Mail{file_manipulator}; - } + file::mail::types::IFileManipulatorPtr Mail::BuildFileManipulator() const + { + static const std::string PATH = {"/var/lib/smtp/mails.txt"}; + auto result = std::make_shared() ; + result->Apply(std::make_shared( BuildErrorRegistrator() )) + .Apply(std::make_shared( PATH )); + return result; + } checker::RegistratorMails Mail::BuildErrorRegistrator() const { diff --git a/src/management/builder/mail.hpp b/src/management/builder/mail.hpp index e735fd6..7cbb29d 100644 --- a/src/management/builder/mail.hpp +++ b/src/management/builder/mail.hpp @@ -2,6 +2,7 @@ #include "management/mail.hpp" #include "checker/registrator_mails.hpp" +#include "file/mail/types/ifile_manipulator.hpp" namespace smtp::manage::builder { @@ -12,6 +13,8 @@ namespace smtp::manage::builder ~Mail() = default; smtp::manage::Mail Build() const; + private: + file::mail::types::IFileManipulatorPtr BuildFileManipulator() const; checker::RegistratorMails BuildErrorRegistrator() const; }; diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp index 0b27bef..b682c49 100644 --- a/src/management/builder/settings.cpp +++ b/src/management/builder/settings.cpp @@ -1,23 +1,26 @@ #include "settings.hpp" #include "checker/errors/settings/port_number.hpp" #include "checker/errors/settings/server.hpp" +#include "file/settings/settings.hpp" +#include "file/settings/checker_decorator.hpp" +#include "file/settings/file_decorator.hpp" namespace smtp::manage::builder { - smtp::manage::Settings Settings::Build() const { - auto file_manipulator = GetFileSettings(); - return smtp::manage::Settings{file_manipulator}; - } - - file::Settings Settings::GetFileSettings() const - { - static const std::string PATH = "/var/lib/smtp/settings.txt"; - - auto registrator = BuildErrorRegistrator(); - return file::Settings{PATH, registrator}; - } + file::settings::Settings settings{ BuildFileManipulator() }; + return smtp::manage::Settings{settings}; + } + + file::settings::types::IFileManipulatorPtr Settings::BuildFileManipulator() const + { + static const std::string PATH = "/var/lib/smtp/settings.txt"; + + auto result = std::make_shared(BuildErrorRegistrator()); + result->Apply(std::make_shared(PATH)); + return result; + } checker::RegistratorSettings Settings::BuildErrorRegistrator() const { diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp index 64f9384..b7215e2 100644 --- a/src/management/builder/settings.hpp +++ b/src/management/builder/settings.hpp @@ -1,8 +1,8 @@ #pragma once #include "management/settings.hpp" -#include "file/settings.hpp" #include "checker/registrator_settings.hpp" +#include "file/settings/types/ifile_manipulator.hpp" namespace smtp::manage::builder { @@ -14,7 +14,7 @@ namespace smtp::manage::builder smtp::manage::Settings Build() const; private: - file::Settings GetFileSettings() const; + file::settings::types::IFileManipulatorPtr BuildFileManipulator()const; checker::RegistratorSettings BuildErrorRegistrator() const; }; diff --git a/src/management/mail.cpp b/src/management/mail.cpp index 87ebb51..d569826 100644 --- a/src/management/mail.cpp +++ b/src/management/mail.cpp @@ -8,9 +8,9 @@ namespace smtp::manage //Constructors // - Mail::Mail( file::Mail const& file_reader ) + Mail::Mail( file::mail::types::IFileManipulatorPtr const& file_reader ) : mFileReader( file_reader ) - , mMails( mFileReader.Read() ) + , mMails( mFileReader->Read() ) { } @@ -28,61 +28,59 @@ namespace smtp::manage { auto merged_mails = GetMergedMails( mails_to_add ); - return RefreshMails( mails_to_add ); + return RefreshMails( merged_mails ); } - bool Mail::DeleteMailToSend( MailsSet const& mail_to_send ) + bool Mail::DeleteMailToSend( MailsSet const& mail_to_delete ) { - auto mails_to_delete = GetItersectionMails( mail_to_send ); + auto mails_to_delete = GetItersectionMails( mail_to_delete ); + auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete ); - return RefreshMails( mails_to_delete ); + return RefreshMails( result_set_after_delete ); } // //Private methods // - MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) + MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) { - MailsSet result; - auto sorted_mail_to_add = mails_to_add; - sorted_mail_to_add.sort(); - mMails.sort(); + auto result = mails_to_add; + result.merge( mMails ); - std::set_union( mMails.cbegin(), mMails.cend(), - sorted_mail_to_add.cbegin(), sorted_mail_to_add.cend(), - std::back_inserter( result )); - return result; - } + result.sort(); + result.unique(); + + return result; + } - MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send ) + MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_delete ) const { - MailsSet result; + MailsSet result; - auto sorted_mail_to_send = mail_to_send; + auto sorted_mail_to_send = mail_to_delete; sorted_mail_to_send.sort(); - mMails.sort(); std::set_intersection( mMails.cbegin(), mMails.cend(), sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(), std::back_inserter( result ) ); return result; } - MailsSet Mail::GetMailsAfterDelete( MailsSet const& result_set_after_delete ) - { - auto result = mMails; - for( const auto& element_to_delete : result_set_after_delete ) - { - result.remove( element_to_delete ); - } + MailsSet Mail::GetMailsAfterDelete( MailsSet const& mails_to_delete ) + { + auto result = mMails; + for( const auto& mail : mails_to_delete ) + { + result.remove( mail ); + } return result; } bool Mail::RefreshMails( MailsSet const& new_mails ) { - auto result = mFileReader.Write( new_mails ); - mMails = mFileReader.Read(); + auto result = mFileReader->Write( new_mails ); + mMails = mFileReader->Read(); return result; } } diff --git a/src/management/mail.hpp b/src/management/mail.hpp index 2a1182a..813a5b4 100644 --- a/src/management/mail.hpp +++ b/src/management/mail.hpp @@ -3,7 +3,7 @@ #include #include -#include "file/mail.hpp" +#include "file/mail/types/ifile_manipulator.hpp" #include "checker/registrator_mails.hpp" namespace smtp::manage @@ -11,19 +11,19 @@ namespace smtp::manage class Mail { public: - explicit Mail( file::Mail const& file_reader ); + explicit Mail( file::mail::types::IFileManipulatorPtr const& file_reader ); ~Mail() = default; MailsSet GetMailToSend() const; bool AddMailsToSend( MailsSet const& mails ); - bool DeleteMailToSend( MailsSet const& mail_to_send ); + bool DeleteMailToSend( MailsSet const& mail_to_delete ); private: - MailsSet GetMergedMails( MailsSet const& mails_to_add ); - MailsSet GetItersectionMails( MailsSet const& mail_to_send ); - MailsSet GetMailsAfterDelete( MailsSet const& result_set_after_delete ); + MailsSet GetMergedMails( MailsSet const& mails_to_add ); + MailsSet GetItersectionMails( MailsSet const& mail_to_delete ) const; + MailsSet GetMailsAfterDelete( MailsSet const& mails_to_delete ); bool RefreshMails( MailsSet const& new_mails ); - file::Mail mFileReader; + file::mail::types::IFileManipulatorPtr mFileReader; MailsSet mMails; }; diff --git a/src/management/settings.cpp b/src/management/settings.cpp index b1f9410..20c38cb 100644 --- a/src/management/settings.cpp +++ b/src/management/settings.cpp @@ -3,7 +3,7 @@ namespace smtp::manage { - Settings::Settings( file::Settings const& file_reader ) + Settings::Settings( file::settings::Settings const& file_reader ) : mFileReader( file_reader ) , mSettingsFields( mFileReader.Read() ) { diff --git a/src/management/settings.hpp b/src/management/settings.hpp index f173d0b..eb2aafb 100644 --- a/src/management/settings.hpp +++ b/src/management/settings.hpp @@ -2,7 +2,7 @@ #include -#include "file/settings.hpp" +#include "file/settings/settings.hpp" #include "management/general.hpp" namespace smtp::manage @@ -10,7 +10,7 @@ namespace smtp::manage class Settings { public: - explicit Settings( file::Settings const& file_reader ); + explicit Settings( file::settings::Settings const& file_reader ); ~Settings() = default; bool SetSettings( manage::SettingsFields const& settings_fields ); @@ -24,7 +24,7 @@ namespace smtp::manage std::string GetHost() const; std::string GetPort() const; private: - file::Settings mFileReader; + file::settings::Settings mFileReader; manage::SettingsFields mSettingsFields; }; } -- cgit v1.2.3