#pragma once #include "std_lib_inc.h" #include "User.h" #include "Task.h" #include "Assignment.h" #ifndef ENVIRONMENT_H #define ENVIRONMENT_H using models::User; using models::Task; using models::Assignment; namespace util { /// Verwalter von Benutzern, Aufgaben und deren Zuordnungen. class Manager { private: //Singelton Instanz des Managers static Manager* INSTANCE; //Container für Zeiger auf alle User anhand der Id map users; //Container für Zeiger auf alle Task anhand der Id map tasks; /// Speichert Zuordnungen von Benutzern zu Aufgaben. vector assignments; //Nächste freie User Id int user_id_index; //Nächste frei Task Id int task_id_index; //Dateiname für den persistenten Speicher string filename; /// Erstellt eine Instanz des Managers und lädt vorhandene Daten. Manager(); /// Aktualisiert die Benutzer-ID. void update_user_id_index(); /// Aktualisiert die Aufgaben-ID. void update_task_id_index(); public: Manager(const Manager&) = delete; Manager& operator=(const Manager&) = delete; /// Holt die Singleton-Instanz des Managers. /// @return Ein Zeiger auf die Instanz. static Manager* get_instance(); /// Speichert die aktuellen Daten in einer Datei. void save(); /// Aktualisiert die Benutzer- und Aufgaben-IDs. void update_indexes(); /// Holt eine eindeutige Benutzer-ID. /// @return Eine neue Benutzer-ID. int get_user_id(); /// Holt eine eindeutige Aufgaben-ID. /// @return Eine neue Aufgaben-ID. int get_task_id(); /// Holt eine Liste aller Benutzer. /// @return Ein Vektor von Benutzerzeigern. vector get_users() const; /// Holt eine Liste aller Aufgaben. /// @return Ein Vektor von Aufgabenzeigern. vector get_tasks() const; /// Holt eine Liste aller Zuordnungen. /// @return Ein Vektor von Zuordnungen. vector get_assignments(); /// Holt einen Benutzer anhand der ID. /// @param id Die Benutzer-ID. /// @return Ein Zeiger auf den Benutzer oder nullptr. User* get_user(int id); /// Holt eine Aufgabe anhand der ID. /// @param id Die Aufgaben-ID. /// @return Ein Zeiger auf die Aufgabe oder nullptr. Task* get_task(int id); /// Holt alle Zuordnungen für einen Benutzer. /// @param user_id Die Benutzer-ID. /// @return Ein Vektor von Zuordnungen. vector get_assignments_for_user(int user_id); /// Holt alle Zuordnungen für eine Aufgabe. /// @param task_id Die Aufgaben-ID. /// @return Ein Vektor von Zuordnungen. vector get_assignments_for_task(int task_id); /// Prüft, ob eine Zuordnung existiert. /// @param user_id Die Benutzer-ID. /// @param task_id Die Aufgaben-ID. /// @return Wahr, falls die Zuordnung existiert. bool assignment_exists(int user_id, int task_id) const; /// Fügt einen neuen Benutzer hinzu. /// @param user Ein Zeiger auf den Benutzer. void add_user(User* user); /// Fügt eine neue Aufgabe hinzu. /// @param task Ein Zeiger auf die Aufgabe. void add_task(Task* task); /// Fügt eine neue Zuordnung hinzu. /// @param as Ein Zeiger auf die Zuordnung. void add_assignment(Assignment* as); /// Löscht einen Benutzer anhand der ID. /// @param id Die Benutzer-ID. void del_user(int id); /// Löscht eine Aufgabe anhand der ID. /// @param id Die Aufgaben-ID. void del_task(int id); /// Löscht eine Zuordnung. /// @param as Die Zuordnung. void del_assignment(Assignment const &as); }; } // util #endif // ENVIRONMENT_H