From eab4c106e0fa1c9fc9cb6f268c40b2fad664cce7 Mon Sep 17 00:00:00 2001 From: jbrass Date: Sun, 9 Feb 2025 23:22:43 +0100 Subject: [PATCH] Found Needle in Haystack. Fixed? Singelton --- ActiveCommand.cpp | 6 +++--- AddCommand.cpp | 8 ++++---- AssignCommand.cpp | 12 ++++++------ Assignment.cpp | 9 ++++++++- DelCommand.cpp | 8 ++++---- ListCommand.cpp | 8 ++++---- Manager.cpp | 10 +++++----- Manager.h | 4 +++- ShowCommand.cpp | 6 +++--- Task.cpp | 4 ++-- UnassignCommand.cpp | 12 ++++++------ User.cpp | 4 ++-- tasks | 13 ------------- 13 files changed, 50 insertions(+), 54 deletions(-) delete mode 100644 tasks diff --git a/ActiveCommand.cpp b/ActiveCommand.cpp index 021fb42..b155d35 100644 --- a/ActiveCommand.cpp +++ b/ActiveCommand.cpp @@ -14,15 +14,15 @@ namespace commands void ActiveCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); int user_id; args >> user_id; if (!user_id) throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); - const User* u = mgr.get_user(user_id); + const User* u = mgr->get_user(user_id); if (!u) throw Error(401, "Eine solche BenutzerIn existiert nicht."); - for (const Assignment* a : mgr.get_assignments_for_user(user_id)) + for (const Assignment* a : mgr->get_assignments_for_user(user_id)) cout << a->get_task_id() << "\n"; } } // commands diff --git a/AddCommand.cpp b/AddCommand.cpp index 6186ce8..36ee923 100644 --- a/AddCommand.cpp +++ b/AddCommand.cpp @@ -17,21 +17,21 @@ namespace commands void AddCommand::run(stringstream& args) { const string data_type = Util::read_string(args); - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); if (data_type == "user") { AddUser u; args >> u; - mgr.add_user(new User(u)); + mgr->add_user(new User(u)); } else if (data_type == "task") { AddTask t; args >> t; - mgr.add_task(new Task(t)); + mgr->add_task(new Task(t)); } else throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden."); - mgr.save(); + mgr->save(); } } // commands diff --git a/AssignCommand.cpp b/AssignCommand.cpp index 8ac62d2..042fb99 100644 --- a/AssignCommand.cpp +++ b/AssignCommand.cpp @@ -14,21 +14,21 @@ namespace commands void AssignCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); int user_id, task_id; args >> user_id >> task_id; if (!args) throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); - const User* u = mgr.get_user(user_id); + const User* u = mgr->get_user(user_id); if (!u) throw Error(401, "Eine solche BenutzerIn existiert nicht."); - const Task* t = mgr.get_task(task_id); + const Task* t = mgr->get_task(task_id); if (!t) throw Error(402, "Eine solche Aufgabe existiert nicht."); - if (mgr.assignment_exists(user_id, task_id)) + if (mgr->assignment_exists(user_id, task_id)) throw Error(302, "Eine solche Zuordnung existiert bereits."); Assignment* a = new Assignment(user_id, task_id); - mgr.add_assignment(a); - mgr.save(); + mgr->add_assignment(a); + mgr->save(); } } // commands diff --git a/Assignment.cpp b/Assignment.cpp index 19b1e82..f2e4a0e 100644 --- a/Assignment.cpp +++ b/Assignment.cpp @@ -7,7 +7,14 @@ using util::Manager; namespace models { Assignment::Assignment(const int& user_id, const int& task_id) : user_id(user_id), task_id(task_id) { //validate user exist - //Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); + if (mgr->get_user(user_id) == nullptr) { + throw Error(401, "Eine solche BenutzerIn existiert nicht."); + } + if (mgr->get_task(task_id) == nullptr) { + throw Error(402, "Eine solche Aufgabe existiert nicht."); + } + } Assignment::Assignment(): user_id(0), task_id(0) {} diff --git a/DelCommand.cpp b/DelCommand.cpp index 9e08e87..d68010a 100644 --- a/DelCommand.cpp +++ b/DelCommand.cpp @@ -14,18 +14,18 @@ namespace commands void DelCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); const string data_type = Util::read_string(args); int id; args >> id; if (!args) throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); if (data_type == "user") - mgr.del_user(id); + mgr->del_user(id); else if (data_type == "task") - mgr.del_task(id); + mgr->del_task(id); else throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); - mgr.save(); + mgr->save(); } } // commands diff --git a/ListCommand.cpp b/ListCommand.cpp index d389355..30dec71 100644 --- a/ListCommand.cpp +++ b/ListCommand.cpp @@ -17,16 +17,16 @@ namespace commands void ListCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); const string data_type = Util::read_string(args); if (data_type == "users") - for (const User* u : mgr.get_users()) + for (const User* u : mgr->get_users()) cout << *u; else if (data_type == "tasks") - for (const Task* t : mgr.get_tasks()) + for (const Task* t : mgr->get_tasks()) cout << *t; else if (data_type == "assignments") - for (const Assignment* a : mgr.get_assignments()) + for (const Assignment* a : mgr->get_assignments()) cout << *a; else throw Error(101, "Befehl ist unbekannt."); diff --git a/Manager.cpp b/Manager.cpp index 6dc3f2f..6f9789a 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -103,7 +103,7 @@ namespace util void Manager::update_task_id_index() { int i = 0; - for (const auto& task_pair : this->users) + for (const auto& task_pair : this->tasks) if (task_pair.second && task_pair.second->get_id() >= i) i = task_pair.second->get_id() + 1; this->task_id_index = i; @@ -129,13 +129,13 @@ namespace util return value; } - Manager* Manager::INSTANCE; + Manager* Manager::INSTANCE = nullptr; - Manager& Manager::get_instance() + Manager* Manager::get_instance() { - if (!INSTANCE) + if (INSTANCE == nullptr) INSTANCE = new Manager(); - return *INSTANCE; + return INSTANCE; } vector Manager::get_users() const diff --git a/Manager.h b/Manager.h index 6fc23be..a8df94d 100644 --- a/Manager.h +++ b/Manager.h @@ -30,7 +30,9 @@ namespace util void update_task_id_index(); public: - static Manager& get_instance(); + Manager(const Manager&) = delete; + Manager& operator=(const Manager&) = delete; + static Manager* get_instance(); void save(); void update_indexes(); diff --git a/ShowCommand.cpp b/ShowCommand.cpp index 2d6e944..05c44ac 100644 --- a/ShowCommand.cpp +++ b/ShowCommand.cpp @@ -18,15 +18,15 @@ namespace commands void ShowCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); const string data_type = Util::read_string(args); if (data_type == "user") - for (User* u : mgr.get_users()) { + for (User* u : mgr->get_users()) { AddUser au = {*u}; cout << au; } else if (data_type == "task") - for (Task* t : mgr.get_tasks()) { + for (Task* t : mgr->get_tasks()) { AddTask at = {*t}; cout << at; } diff --git a/Task.cpp b/Task.cpp index fbbc498..49dd17d 100644 --- a/Task.cpp +++ b/Task.cpp @@ -20,8 +20,8 @@ namespace models Task::Task(const AddTask& t): id(0), name(t.get_name()), description(t.get_description()), children(t.get_children()) { - Manager& mgr = Manager::get_instance(); - this->id = mgr.get_task_id(); + Manager* mgr = Manager::get_instance(); + this->id = mgr->get_task_id(); } diff --git a/UnassignCommand.cpp b/UnassignCommand.cpp index dc445f0..08c82a0 100644 --- a/UnassignCommand.cpp +++ b/UnassignCommand.cpp @@ -13,21 +13,21 @@ namespace commands void UnassignCommand::run(stringstream& args) { - Manager& mgr = Manager::get_instance(); + Manager* mgr = Manager::get_instance(); int user_id, task_id; args >> user_id >> task_id; if (!args) throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); - const User* u = mgr.get_user(user_id); + const User* u = mgr->get_user(user_id); if (!u) throw Error(401, "Eine solche BenutzerIn existiert nicht."); - const Task* t = mgr.get_task(task_id); + const Task* t = mgr->get_task(task_id); if (!t) throw Error(401, "Eine solche Zuordnung existiert nicht."); - if (!mgr.assignment_exists(user_id, task_id)) + if (!mgr->assignment_exists(user_id, task_id)) throw Error(302, "Eine solche Zuordnung existiert bereits."); Assignment as = {user_id, task_id}; - mgr.del_assignment(as); - mgr.save(); + mgr->del_assignment(as); + mgr->save(); } } // commands diff --git a/User.cpp b/User.cpp index 0f6c812..15ab721 100644 --- a/User.cpp +++ b/User.cpp @@ -62,8 +62,8 @@ namespace models { istream& operator>>(istream& is, AddUser& u) { - Manager& mgr = Manager::get_instance(); - int id = mgr.get_user_id(); + Manager* mgr = Manager::get_instance(); + int id = mgr->get_user_id(); string name, surname; is >> name >> surname; diff --git a/tasks b/tasks deleted file mode 100644 index 2427c11..0000000 --- a/tasks +++ /dev/null @@ -1,13 +0,0 @@ -[tasks] -0 %Eine Aufgabe% %Mit einer längeren Beschreibung% -1 %Noch eine Aufgabe% %Kurze Beschreibung% 0 - -[users] -0 Fleissiger Mitarbeiter -1 NochEin Mitarbeiter - -[assignments] -0 0 -0 1 -1 1 -