Skip to content
Sascha Lemke edited this page May 18, 2018 · 31 revisions

Open Product Evaluation Architektur

Dieses Wiki beschreibt die Architektur, Datenstrukturen und Schnittstellen des open-product-evaluation-server. Zu Beginn werden die Anforderungen an die Architektur und Schnittstellen formuliert und im Anschluss die dafür notwendige Datenstruktur beschrieben. Zuletzt wird die Datenstruktur für GraphQL beschrieben und welche Querys, Mutations und Subscriptions notwendig sind.

Anforderungen

Für die Architektur wurden die folgenden Anforderungen formuliert:

  • Die einzelnen Systemkomponenten sollen möglichst entkoppelt Arbeiten.
  • Das System muss lokal arbeiten, als auch über das Internet erreichbar sein.
  • Das System soll die Bewertung von Projektarbeiten anhand verschiedener Methoden ermöglichen.
  • Das System soll auf verschiedenen Endgeräten verfügbar sein.
  • Das System soll eine große Menge von Eingabegeräten unterstützen.

Architektur

Zur Umsetzung des open-product-evaluation-server wurde die folgende Architektur entwickelt:

Architektur

Hardware

Device

Clientview

Controller

Backend

Adminview

Visualisation

Datenstrukturen im Backend

In den folgenden Abschnitten werden die verschiedenen Datenstrukturen dokumentiert, welche für die Umsetzung und Kommunikation zwischen den einzelnen Komponenten notwendig ist.

Surveys (Umfragen)

Die surveys stellen die Umfragen innerhalb des Systems dar. Potenzielle Clients können diese Daten zu Beginn abrufen um eine Liste der möglichen Umfragen darzustellen. Nachdem eine Umfrage ausgewählt wurde kann diese anhand der Daten dargestellt werden. Sobald eine Umfrage durchlaufen wurde sollten alle Ergebnisse der Umfrage wieder an den Server kommuniziert werden.

{
  "_id" : "1",
  "name": "Umfrage zum Nutzungsverhalten von GraphQL",
  "description" : "Hier können zusätzliche Informationen zur Umfrage angegeben werden",
  "owner" : "1",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "active": true,
  "public": false,
  "questions": [

  ],
  "votes": [

  ],
  "controller": [

  ]
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID der Umfrage (string)
  • name Der Titel der Umfrage (string)
  • description Eine Beschreibung der Umfrage (string)
  • owner Die ID der Person, welche die Umfrage erstellt hat (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • active Beschreibt, ob die Umfrage gerade aktiv ist (boolean)
  • public Beschreibt, ob die Umfrage von jedem Gerät dargestellt werden darf (boolean)
  • questions Ein Array mit allen Fragen der Umfrage, siehe Fragen
  • votes Ein Array mit allen Ergebnissen der Umfrage
  • controller Ein Array mit allen zugeordneten Controllern

Questions (Fragen)

Die questions stellen die einzelnen Fragen einer Umfrage dar und befinden sich als Unterobjekt in den surveys. Die questions werden bei der Erstellung der Umfrage angegeben und werden nach Beginn einer Umfrage nicht mehr geändert.

{
  "_id" : "1",
  "surveyID" : "1",
  "value": "Was halten Sie davon?",
  "description" : "Bitte sagen Sie was Sie davon halten.",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "sequence" : 1,
  "evaluationMethod": {

  },
  "images": [

  ]
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID der Frage (string)
  • surveyID Die ID der Umfrage (string)
  • value Die Frage (string)
  • description Eine zusätzliche Beschreibung der Frage (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • sequence Die Reihenfolge der Fragen innerhalb der Umfrage (integer)
  • evaluationMethod Die Beschreibung der Frage (Objekt)
  • images Die Bilder die während der Frage dargestellt werden sollen (Array)

EvaluationMethod (Fragetypen)

Die evaluationMethod beschreibt eine konkrete Frage mit anhand von Metadaten.

{
  "_id" : 1,
  "typeName" : "Like und Dislike",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "stepSize": 1,
  "stepDescription": [
    {
      "value" : "Dislike",
      "image" : {

      },
      "sequence" : 1
    },
    {
      "value" : "Like",
      "image" : {

      },
      "sequence" : 1
    }
  ],
  "default": null,
  "min": 0,
  "max": 1
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID der Evaluationsmethode (string)
  • typeName Der Typ der Evaluationsmethode (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • stepSize Die Schrittgröße innerhalb der Evaluationsmethode (Integer)
  • stepDescription Eine Beschreibung der Schritte der Evaluationsmethode (Array)
  • default Der Standardwert der Evaluationsmethode (string)
  • min Der Mindestwert der Evaluationsmethode (Integer)
  • max Der Maximalwert der Evaluationsmethode (Integer)

Votes (Ergebnisse)

{
  "_id": "1",
  "controllerID" : "1",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "surveyID": "1",
  "answers": [
    {
      "questionID" : "1",
      "values": [
        {
          "image": "hash",
          "value": 1
        }
      ],
      "normalized": [
        {
          "image": "hash",
          "value": 0.45656
        }
      ]
    }
  ],
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID der Abstimmung (string)
  • controllerID Die ID des dazugehörenden Controllers (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • surveyID Die ID der dazugehörenden Umfrage (Integer)
  • answers Ein Array der angegebenen Antworten der Umfrage (Array)
    • questionID Die ID der Frage (string)
    • values Ein Array mit der Antwort zu dem dazugehörigen Bild (Array)
      • image Das Bild das bewertet wurde (Objekt)
      • value Das Ergebnis der Bewertung (Integer)
    • normalized
      • image Das Bild das bewertet wurde (Objekt)
      • value Das normalisierte Ergebnis der Bewertung (Integer)

Images (Bilder)

{
  "_id": "1",
  "filename": "GraphQL",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "type": "jpg",
  "hash": "455523d86a8a1ab7c7d33208fe0219e7"
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID des Bildes (string)
  • filename Der Dateiname des Bildes (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • type Der Dateityp des Bildes (string)
  • hash Der Hash des Bildes zur Referenzierung über das Dateisystem (string)

Controller

{
  "_id" : "1",
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "connectionID": "123",
  "activeQuestionID" : "1",
  "activeSurveyID" : "1",
  "remote": false,
  "devices": [

  ]
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID des Controllers (string)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • connectionID Die ID der Socketverbindung (string)
  • activeQuestionID Die ID der aktuell ausgewählten Frage (string)
  • activeSurveyID Die ID der aktuell ausgewählten Umfrage (string)
  • remote Beschreibt, ob die Umfrage für externe Geräte verfügbar ist (boolean)
  • devices Ein Array mit den zugeordneten Geräten (Array)

Devices (Geräte)

Die Datenstruktur devices beschreibt die Geräte die derzeit mit dem System registriert sind. Sie stellen auch ein Unterobjekt der controller dar.

{
  "_id" : "1",
  "devicename" : "Handy",
  "type" : ["Like", "Slider"],
  "creationDate" : "2018-05-18T09:09:24.365Z",
  "lastUpdate" : "2018-05-18T09:09:24.365Z",
  "remote" : true,
  "controllerID" : "1"
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID des Gerätes (string)
  • devicename Der Name des Gerätes (string)
  • type Der Typ des Gerätes (Array)
  • creationDate Das Erstellungsdatum der Umfrage, welche automatisch erstellt wird (string)
  • lastUpdate Das Datum der letzten Änderung des Datensatzes, welches automatisch aktualisiert wird (string)
  • remote Beschreibt, ob das Gerät extern erreichbar ist (boolean)
  • controllerID Die ID des zugeordneten Controllers (string)

Users

Die Datenstruktur users beschreibt die Informationen, welche zur Identifikation eines Nutzers innerhalb Systems notwendig sind. Dies wird benötigt um den Benutzer zu authentifizieren und im späteren Verlauf auch zu authorisieren.

{
  "_id" : "1",
  "firstname" : "Hans",
  "lastname": "Peter",
  "email" : "student@smail.th-koeln.de",
  "password" : "455523d86a8a1ab7c7d33208fe0219e7"
}

Die Datenstruktur setzt sich dabei aus den folgenden Attributen zusammen:

  • _id Die ID des Nutzers (string)
  • firstname Der Vorname des Nutzers (string)
  • lastname Der Nachname des Nutzers (string)
  • email Die E-Mail des Nutzers(string)
  • password Das Passwort des Nutzers (string)
Clone this wiki locally