Fix on Part of Deletion Restriction

This commit is contained in:
jbrass 2025-02-10 00:25:28 +01:00
parent 4dde8d2209
commit 037173106a
4 changed files with 39 additions and 33 deletions

View file

@ -5,18 +5,7 @@
using err::Error; using err::Error;
using util::Manager; using util::Manager;
namespace models { namespace models {
Assignment::Assignment(const int& user_id, const int& task_id) : user_id(user_id), task_id(task_id) { 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();
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) {} Assignment::Assignment(): user_id(0), task_id(0) {}
ostream& Assignment::write(ostream& stream) const ostream& Assignment::write(ostream& stream) const
@ -33,12 +22,12 @@ namespace models {
return this->user_id; return this->user_id;
} }
ostream& operator<<(ostream& os, const Assignment& t) { ostream& operator<<(ostream& os, const Assignment& assignment) {
os << t.get_user_id() << " " << t.get_task_id() << "\n"; os << assignment.get_user_id() << " " << assignment.get_task_id() << "\n";
return os; return os;
} }
istream& operator>>(istream& is, Assignment& t) { istream& operator>>(istream& is, Assignment& assignment) {
int user_id; int user_id;
is >> user_id; is >> user_id;
if (!is) if (!is)
@ -47,7 +36,7 @@ namespace models {
is >> task_id; is >> task_id;
if (!is) if (!is)
throw Error(602, "Datei hat ein unbekanntes Format."); throw Error(602, "Datei hat ein unbekanntes Format.");
t = {user_id, task_id}; assignment= {user_id, task_id};
return is; return is;
} }
} // models } // models

View file

@ -23,6 +23,7 @@ namespace commands
if (data_type == "user") if (data_type == "user")
mgr->del_user(id); mgr->del_user(id);
else if (data_type == "task") else if (data_type == "task")
// Validate if we can Delete This Task.
mgr->del_task(id); mgr->del_task(id);
else else
throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden"); throw Error(102, "Ein Parameter eines Befehls konnte nicht gelesen werden");

View file

@ -161,7 +161,7 @@ namespace util
return this->assignments; return this->assignments;
} }
User* Manager::get_user(const int& id) User* Manager::get_user(const int id)
{ {
if (this->users.count(id) == 0) if (this->users.count(id) == 0)
return nullptr; return nullptr;
@ -169,26 +169,36 @@ namespace util
} }
Task* Manager::get_task(const int& id) Task* Manager::get_task(const int id)
{ {
if (this->tasks.count(id) == 0) if (this->tasks.count(id) == 0)
return nullptr; return nullptr;
return this->tasks[id]; return this->tasks[id];
} }
Vector<Assignment*> Manager::get_assignments_for_user(const int& id) Vector<Assignment*> Manager::get_assignments_for_user(const int user_id)
{ {
Vector<Assignment*> user_assignments; Vector<Assignment*> user_assignments;
if (this->get_user(id) == nullptr) if (this->get_user(user_id) == nullptr)
throw Error(401, "Eine solche BenutzerIn existiert nicht."); throw Error(401, "Eine solche BenutzerIn existiert nicht.");
for (Assignment* as : this->assignments) for (Assignment* as : this->assignments)
if (as->get_user_id() == id) if (as->get_user_id() == user_id)
user_assignments.push_back(as); user_assignments.push_back(as);
return user_assignments; return user_assignments;
} }
Vector<Assignment*> Manager::get_assignments_for_task(const int task_id)
bool Manager::assignment_exists(const int& user_id, const int& task_id)
{ {
Vector<Assignment*> task_assignments;
if (this->get_task(task_id) == nullptr)
throw Error(401, "Eine solche BenutzerIn existiert nicht.");
for (Assignment* as : this->assignments)
if (as->get_task_id() == task_id)
task_assignments.push_back(as);
return task_assignments;
}
bool Manager::assignment_exists(int user_id, int task_id) {
for ( Assignment* as : this->assignments) for ( Assignment* as : this->assignments)
if (as->get_user_id() == user_id && as->get_task_id() == task_id) if (as->get_user_id() == user_id && as->get_task_id() == task_id)
return true; return true;
@ -221,19 +231,24 @@ namespace util
this->assignments.push_back(as); this->assignments.push_back(as);
} }
void Manager::del_user(const int& id) void Manager::del_user(const int id)
{ {
if (this->users.count(id) == 0) if (this->users.count(id) == 0)
throw Error(401, "Eine solche BenutzerIn existiert nicht."); throw Error(401, "Eine solche BenutzerIn existiert nicht.");
//Assigment
if (!this->get_assignments_for_user(id).empty()) {
throw Error(201, "Benutzer kann nicht gelöscht werden.");
}
this->users.erase(id); this->users.erase(id);
} }
void Manager::del_task(const int& id) void Manager::del_task(const int id)
{ {
if (this->tasks.count(id) == 0) if (this->tasks.count(id) == 0)
throw Error(402, "Eine solche Aufgabe existiert nicht."); throw Error(402, "Eine solche Aufgabe existiert nicht.");
if (!this->get_assignments_for_task(id).empty()) {
throw Error(201, "Aufgabe kann nicht gelöscht werden.");
}
this->tasks.erase(id); this->tasks.erase(id);
} }

View file

@ -43,17 +43,18 @@ namespace util
vector<Task*> get_tasks() const; vector<Task*> get_tasks() const;
vector<Assignment*> get_assignments(); vector<Assignment*> get_assignments();
User* get_user(const int& id); User* get_user(int id);
Task* get_task(const int& id); Task* get_task(int id);
vector<Assignment*> get_assignments_for_user(const int& id); vector<Assignment *> get_assignments_for_user(int user_id);
bool assignment_exists(const int& user_id, const int& task_id); vector<Assignment *> get_assignments_for_task(int task_id);
bool assignment_exists(int user_id, int task_id);
void add_user(User* user); void add_user(User* user);
void add_task(Task* task); void add_task(Task* task);
void add_assignment(Assignment* as); void add_assignment(Assignment* as);
void del_user(const int& id); void del_user(int id);
void del_task(const int& id); void del_task(int id);
void del_assignment(Assignment& as); void del_assignment(Assignment& as);
}; };
} // util } // util