diff --git a/handlers/handlerfactory.cpp b/handlers/handlerfactory.cpp index 581a582..a774389 100644 --- a/handlers/handlerfactory.cpp +++ b/handlers/handlerfactory.cpp @@ -18,6 +18,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + #include "handlerfactory.h" #include "handler.h" #include "handlerdefault.h" @@ -31,72 +32,51 @@ SOFTWARE. #include "handlercategory.h" #include "handlerhistory.h" #include "handlerpagedelete.h" -class Factory + +std::unique_ptr HandlerFactory::createHandler(const std::string &action, Session &userSession) { - Template &templ; - Database &db; - Session &userSession; - UrlProvider &urlProvider; - ICache &cache; - HandlerConfig &handlerConfig; -public: - - Factory(HandlerConfig &handlerConfig, Template &templ, Database &db, Session &usersession, UrlProvider &urlprovider, ICache &cache) : handlerConfig(handlerConfig), templ(templ) ,db(db), userSession(usersession), urlProvider(urlprovider), cache(cache) { } - - template - inline std::unique_ptr produce() - { - return std::make_unique(handlerConfig, templ, db, userSession, urlProvider, cache); - } -}; - -std::unique_ptr createHandler(const std::string &action, HandlerConfig &handlerConfig, Template &templ, Database - &db, Session &usersession, UrlProvider &urlprovider, ICache &cache) -{ - - Factory producer(handlerConfig, templ, db, usersession, urlprovider, cache); - - if(action == "" || action == "index") - { - return producer.produce(); - } - if(action == "show") - { - return producer.produce(); - } - if(action == "edit") - { - return producer.produce(); - } - if(action == "login") - { - return producer.produce(); - } - if(action == "search") - { - return producer.produce(); - } - if(action == "delete") - { - return producer.produce(); - } - if(action == "allpages") - { - return producer.produce(); - } - if(action == "allcategories") - { - return producer.produce(); - } - if(action == "showcat") - { - return producer.produce(); - } - if(action == "recent") - { - return producer.produce(); - } + if(action == "" || action == "index") + { + return produce(userSession); + } + if(action == "show") + { + return produce(userSession); + } + if(action == "edit") + { + return produce(userSession); + } + if(action == "login") + { + return produce(userSession); + } + if(action == "search") + { + return produce(userSession); + } + if(action == "delete") + { + return produce(userSession); + } + if(action == "allpages") + { + return produce(userSession); + } + if(action == "allcategories") + { + return produce(userSession); + } + if(action == "showcat") + { + return produce(userSession); + } + if(action == "recent") + { + return produce(userSession); + } - return producer.produce(); + return produce(userSession); } + diff --git a/handlers/handlerfactory.h b/handlers/handlerfactory.h index 8590569..42a237e 100644 --- a/handlers/handlerfactory.h +++ b/handlers/handlerfactory.h @@ -3,6 +3,26 @@ #include #include "handler.h" #include "../template.h" +class HandlerFactory +{ + HandlerConfig &handlerConfig; + Template &templ; + Database &db; + UrlProvider &urlProvider; + ICache &cache; + + template + inline std::unique_ptr produce( Session &userSession) + { + return std::make_unique(handlerConfig, templ, db, userSession, urlProvider, cache); + } +public: + + HandlerFactory(HandlerConfig &handlerConfig, Template &templ, Database &db, UrlProvider &urlprovider, ICache &cache) : handlerConfig(handlerConfig), templ(templ) ,db(db), urlProvider(urlprovider), cache(cache) { } + std::unique_ptr createHandler(const std::string &action, Session &userSession); + + +}; + -std::unique_ptr createHandler(const std::string &action, HandlerConfig &handlerConfig, Template &templ, Database &db, Session &usersession, UrlProvider &urlprovider, ICache &cache); #endif // HANDLERFACTORY_H diff --git a/qswiki.cpp b/qswiki.cpp index 96b0eb3..1499782 100644 --- a/qswiki.cpp +++ b/qswiki.cpp @@ -133,14 +133,16 @@ int main(int argc, char **argv) User::setAnon(anon.value()); Template siteTemplate { config.templateprefix, config.templatepath, config.urls, config.configVarResolver }; - UrlProvider urlprovider { config.urls }; + UrlProvider urlProvider { config.urls }; auto cache = createCache(config.configVarResolver); cache->clear(); - RequestWorker requestWorker (config.handlersConfig, *database, siteTemplate, urlprovider, *cache ); + + HandlerFactory handlerFactory { config.handlersConfig, siteTemplate, *database.get(), urlProvider, *cache.get()}; + RequestWorker requestWorker { handlerFactory, *database->createSessionDao().get(), siteTemplate }; auto interface = createGateway(config); diff --git a/requestworker.cpp b/requestworker.cpp index 6107071..28fd73f 100644 --- a/requestworker.cpp +++ b/requestworker.cpp @@ -68,8 +68,7 @@ Response RequestWorker::processRequest(const Request &r) } } - auto handler = createHandler(r.param("action"), *this->handlerConfig, *this->templ, *this->db, session, *this->urlProvider, *this->cache); - + auto handler = handlerFactory->createHandler(r.param("action"), session); try { Response response = handler->handle(r); diff --git a/requestworker.h b/requestworker.h index cb189df..f9b3a24 100644 --- a/requestworker.h +++ b/requestworker.h @@ -9,25 +9,24 @@ #include "urlprovider.h" #include "database/sessiondao.h" #include "cache/fscache.h" +#include "handlers/handlerfactory.h" + class RequestWorker { - Database *db; Template *templ; UrlProvider *urlProvider; ICache *cache; - HandlerConfig *handlerConfig; - std::unique_ptr sessionDao; + HandlerFactory *handlerFactory; + SessionDao *sessionDao; + private: Session retrieveSession(std::string token) const; public: - RequestWorker(HandlerConfig &handlerConfig, Database &db, Template &templ, UrlProvider &provider, ICache &cache) + RequestWorker(HandlerFactory &handlerFactory, SessionDao &sessionDao, Template &templ) { - this->handlerConfig = &handlerConfig; - this->db = &db; + this->handlerFactory = &handlerFactory; this->templ = &templ; - this->urlProvider = &provider; - this->sessionDao = db.createSessionDao(); - this->cache = &cache; + this->sessionDao = &sessionDao; }