# Anforderungsdokument

## Einleitung

Die Survey-Management-Funktion ermöglicht Survey-Administrator:innen das Erstellen, Konfigurieren und Verwalten von Online-Umfragen über eine RESTful API. Die Funktion stellt die grundlegenden Fähigkeiten für Umfrageerstellung, Fragenverwaltung und den Lebenszyklus einer Umfrage bereit. Das System folgt einer zustandslosen Microservice-Architektur, in der Administrator:innen Umfragen mit Metadaten anlegen, unterschiedliche Fragetypen mit Antwortoptionen hinzufügen, vollständige Umfragestrukturen abrufen und bei Bedarf Umfragen oder einzelne Fragen löschen können.

## Glossar

- **Survey_System**: Die Online-Survey-Backend-Anwendung, die Umfragevorgänge verwaltet
- **Administrator**: Eine Person mit Berechtigungen zum Erstellen, Ändern und Löschen von Umfragen
- **Survey**: Eine Sammlung von Fragen mit Metadaten, um Antworten von Teilnehmenden zu sammeln
- **Question**: Eine einzelne Frage innerhalb einer Umfrage, die eine Antwort erfordert
- **Answer_Option**: Eine vordefinierte Auswahlmöglichkeit für Rating- und Choice-Fragen
- **Question_Type**: Das Format einer Frage (Rating, Single Choice, Multiple Choice oder Open Text)
- **Internal_Value**: Eine alphanumerische Kennung für Analysezwecke

## Anforderungen

### Anforderung 1

**User Story:** Als Survey-Administrator:in möchte ich neue Umfragen mit vollständigen Metadaten anlegen, damit ich die Grundlage für das Sammeln von Antworten schaffe.

#### Akzeptanzkriterien

1. WHEN eine Administratorin oder ein Administrator eine Umfrage mit Titel und Ersteller:in (optional Beschreibung, Start- und Enddatum) anlegt, THEN THE Survey_System SHALL eine neue Umfrage mit einer generierten eindeutigen Kennung anlegen und alle angegebenen Metadaten speichern
2. WHEN optionale Felder (Beschreibung oder Datumsangaben) weggelassen werden, THEN THE Survey_System SHALL die Umfrage mit diesen leeren Feldern erstellen
3. WHEN ein leerer oder nur aus Leerzeichen bestehender Titel eingereicht wird, THEN THE Survey_System SHALL die Erstellung mit einem Validierungsfehler ablehnen, der das Titelfeld benennt
4. WHEN ein Enddatum vor dem Startdatum eingereicht wird, THEN THE Survey_System SHALL die Erstellung mit einem Validierungsfehler zum Datumsbereich ablehnen
5. WHEN eine Umfrage erfolgreich erstellt wird, THEN THE Survey_System SHALL die eindeutige Umfragekennung im API-Response für nachfolgende Vorgänge zurückgeben

### Anforderung 2

**User Story:** Als Survey-Administrator:in möchte ich Fragen mit Antwortoptionen zu bestehenden Umfragen hinzufügen, damit ich umfassende Fragebögen für die Datenerhebung erstellen kann.

#### Akzeptanzkriterien

1. WHEN eine Administratorin oder ein Administrator eine Frage zu einer bestehenden Umfrage hinzufügt, THEN THE Survey_System SHALL die Frage mit der angegebenen Reihenfolge, dem Fragentext, dem Fragetyp und dem Pflicht-Flag anlegen
2. WHEN der Fragetyp Rating, Single Choice oder Multiple Choice ist und Antwortoptionen übergeben werden, THEN THE Survey_System SHALL jede Antwortoption mit Anzeigetext und Internal_Value der Frage zuordnen und speichern
3. WHEN eine Frage mit einer doppelten Reihenfolgenummer innerhalb derselben Umfrage hinzugefügt werden soll, THEN THE Survey_System SHALL die Anfrage mit einem Validierungsfehler zur Reihenfolge ablehnen
4. WHEN für Rating-, Single-Choice- oder Multiple-Choice-Fragen weniger als zwei Antwortoptionen übergeben werden, THEN THE Survey_System SHALL die Anfrage mit einem Validierungsfehler zu den Antwortoptionen ablehnen
5. WHEN innerhalb einer Frage doppelte Internal_Values für Antwortoptionen eingereicht werden, THEN THE Survey_System SHALL die Anfrage mit einem Validierungsfehler zu den kollidierenden Internal_Values ablehnen
6. WHEN der Fragetyp Open Text ist, THEN THE Survey_System SHALL die Frage akzeptieren, ohne dass Antwortoptionen erforderlich sind
