forked from University/epr24pr5-ojanssen2
129 lines
4 KiB
C++
129 lines
4 KiB
C++
#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<int, User*> users;
|
|
//Container für Zeiger auf alle Task anhand der Id
|
|
map<int, Task*> tasks;
|
|
/// Speichert Zuordnungen von Benutzern zu Aufgaben.
|
|
vector<Assignment*> 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<User*> get_users() const;
|
|
|
|
/// Holt eine Liste aller Aufgaben.
|
|
/// @return Ein Vektor von Aufgabenzeigern.
|
|
vector<Task*> get_tasks() const;
|
|
|
|
/// Holt eine Liste aller Zuordnungen.
|
|
/// @return Ein Vektor von Zuordnungen.
|
|
vector<Assignment*> 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<Assignment *> 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<Assignment *> 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
|