Skip to content

Commit

Permalink
Add documentation for route-resolving
Browse files Browse the repository at this point in the history
  • Loading branch information
brnsnt committed May 18, 2017
1 parent ddb8a03 commit 2290e29
Show file tree
Hide file tree
Showing 35 changed files with 376 additions and 204 deletions.
10 changes: 5 additions & 5 deletions documentation/AnalyticsDocumentationEN.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
#Analytics documentation
# Analytics documentation

MedCodeSearch sends analytics data to eonum in order to optimize the search algorithm. In this documentation is specified when MedCodeSearch sends this data and how.


###When does analytics data get sent?
### When does analytics data get sent?

When the user clicks on a code in the search results list.
No data is sent when the user clicks on a subordinate or superior code or on a code in the list of remembered codes.


###How does analytics data get sent?
### How does analytics data get sent?

MedCodeSearch sends a http-request to eonum with the URL-Parameter:
query=Input
Expand All @@ -25,11 +25,11 @@ Where "Language" is the language of the catalogue of the code
and "Input" ist der search term that was used.


###How is the analytics feature implemented?
### How is the analytics feature implemented?

The function to send the analytics data is handled by two components:
search-results.component.ts and catalog.service.ts

When a code is clicked on the function openCode in the search-results component is activated. this calls the function sendAnalytics which calls the sendAnalytics function in the catalog.service. The catalog.service calls the function getSingleElementForTypeByCode which makes the actual http request.

It se important to know that the search-results component calls the sendAnalytics function of the catalog.service interface (that is i.catalog.service.ts).
It se important to know that the search-results component calls the sendAnalytics function of the catalog.service interface (that is i.catalog.service.ts).
10 changes: 5 additions & 5 deletions documentation/AnalyticsDokumentationDE.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
#Analytics Dokumentation
# Analytics Dokumentation

MedCodeSearch sendet Analytics Daten an eonum um den SuchAlgorithmus zu optimieren. In dieser Dokumentation wird spezifiziert wann diese Daten gesendet werden und wie.


###Wann werden Analytics Daten gesendet?
### Wann werden Analytics Daten gesendet?

Wenn der Benutzer auf einen Code in der Resultatenliste klickt.
Es werden kein Analytics Daten gesendet wenn der Benutzer einen unter- oder übergeordneten Code anklickt oder einen Code in der Liste der gemerkten Codes anklickt.


###Wie werden Analytics Daten gesendet?
### Wie werden Analytics Daten gesendet?

MedCodeSearch sendet ein http-request an eonum mit dem URL-Parameter:
query=Eingabe
Expand All @@ -25,10 +25,10 @@ Wobei "Sprache" die Sprache des Katalogs des Codes ist
und "Eingabe" ist der Suchbegriff der verwendet wurde.


###Wie ist das Analytics Feature implementiert?
### Wie ist das Analytics Feature implementiert?

Die Funktion zum senden der Analytics Daten wird von zwei Komponenten gehandhabt. Die komponente search-results.component.ts und catalog.service.ts

Wenn auf ein Code geklickt wird dann wird die Funktion openCode in der search-results Komponente aktiviert. Diese ruft die Funktion sendAnalytics auf welche dann die sendAnalytics funktion im catalog.service aufruft. Der catalog.service ruft dann getSingleElementForTypeByCode auf welche den tatsächlichen http aufruf handhabt.

Es ist wichtig zu wissen dass die search-results Komponente die sendAnalytics funktion des catalog.service interfaces aufruft (i.catalog.service.ts).
Es ist wichtig zu wissen dass die search-results Komponente die sendAnalytics funktion des catalog.service interfaces aufruft (i.catalog.service.ts).
4 changes: 2 additions & 2 deletions documentation/CatalogArchitecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Architektur eonum search frontend

![](./CatalogArchitecture.png)
![](uml/class/CatalogArchitecture.png)

Die MedCodeSearch Software erlaubt es, mehrere verschiedene Kataloge nach Elementen zu durchsuchen. In diesem Dokument is beschrieben, wie die Architektur dahinter aussieht.

Expand All @@ -14,4 +14,4 @@ Zum Testen können beliebige Fake-Objekte, welche das `ICatalogService`-Interfac

Die Klasse `CatalogElement` modelliert ein Objekt aus einem Katalog. `CatalogElement` enthält dabei alle Eigenschaften der Objekte, welche in allen Katalogen gleich sind.

Die Klasse `CatalogConfiguration` dient zur Initialisierung des `CatalogService` und beinhaltet Daten wie die Katalog-Suchadressen und die verfügbaren Versionen.
Die Klasse `CatalogConfiguration` dient zur Initialisierung des `CatalogService` und beinhaltet Daten wie die Katalog-Suchadressen und die verfügbaren Versionen.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Architektur Favorite System

![](./HtmlArchitecture.png)
![](uml/class/HtmlArchitecture.png)

In diesem Dokument ist die Architektur der Angular-Komponenten dokumentiert.

Expand Down
4 changes: 2 additions & 2 deletions documentation/FavoriteArchitecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Architektur Favorite System

![](./FavoriteArchitecture.png)
![](uml/class/FavoriteArchitecture.png)


Die MedCodeSearch Software unterstützt das Sichern von Favoriten, so dass der/die Benutzer/in einen bestimmten Code schnell wieder finden kann. In diesem Dokument ist die Architektur beschrieben.
Expand All @@ -15,4 +15,4 @@ Das `IFavoritePersister` Interface erlaubt das freie Austauschen der Klassen `Se

Das `FavoriteElementComponent` ist die Konsumenten-Klasse des Features und die Komponente, welche dem Benutzer entsprechende grafische Buttons und Elemente zur Verwendung der Favoriten-Funktion zur Verfügung stellt.

Das `FavoriteElement` selbst modelliert die Daten des Favorite-Code.
Das `FavoriteElement` selbst modelliert die Daten des Favorite-Code.
6 changes: 3 additions & 3 deletions documentation/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ In vielen Fällen kann diese Konfiguration in eine Datei namens .htaccess geschr
}


---


# Updaten der Versions

Expand All @@ -47,15 +47,15 @@ ersetzt werden.

Das Python script `generateVersions.py`, generiert dieses File bei Bedarf neu.

-----


# Build

Um einen neuen build der App zu erstellen, einfach folgenden Befehl ausführen.

npm install && npm run-script build

Der Output befindet sich dann, mit neuen `versions.json` file,
Der Output befindet sich dann, mit neuen `assets/versions.json` file,
im `dist` Ordner.


62 changes: 62 additions & 0 deletions documentation/routing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Routing: Auflösung und Validierung der URL

Die Componenten werden jeweils erst initialisiert,
nachdem die Route, zu der sie gehören, aufgelöst wurde.
D.h. DetailComponent wird z.B erst initialisiert, wenn das anzuzeigende
Element geladen ist.

Folgendes Diagram veraunschaulicht in welcher Reihenfolge die Komponenten
initialisiert werden, und welche Route-Parameter und Daten sie beobachten.

![](uml/sequence/page_load.png)

## Katalog Validierung

Auf den Routen `/:lang/:catalog` und `/:lang/:catalog/:version` wird der
**CatalogResolver** aktiviert um die Route aufzulösen.

Dabei werden die Parameter validiert, und gegebenenfalls wird auf eine
gültige Version umgeleitet.

Der **CatalogResolver** stellt zudem *displayInfos* für jeden Katalog
zusammen.

Diese enthalten alle anzuzeigenden Versionen, verfügbaren
Versionen, sowie die ausgewählte Version bezüglich der Sprache, und der
**SearchFormComponent** verwendet diese um die Dropdowns zu füllen.

![](uml/sequence/resolve_catalog.png)

## Katalog Wechsel

Wird ein Katalog oder Version ausgewählt, wird die Auswahl, bezüglich der
ausgewählten Sprache, direkt vom **SearchFormComponent** validiert.

Ist die Auswahl nicht gültig, wird ein Popup angezeigt um die Sprache
zu wechseln .

![](uml/sequence/change_catalog.png)

## Katalog Element wechsel

Auf der Route `:catalog/:version/:type/:code` wird der **CatalogElementResolver**
aktiviert, welcher entsprechend der Route, das Element für den
**DetailComponent** lädt.

Entweder befindet sich das Element bereits im **CatalogElementCache**,
oder wird von der API geladen.

Es werden zudem alle **Parent**-Elemente geladen, damit
direkt die Breadcrum angezeigt werden kann.

![](uml/sequence/resolve_catalog_element.png)

## Suche

Beim Wechsel des QueryParameter *query*, startet der **SearchResultsComponent**
die Suche.

Der **CatalogSearchService** ist so aufgebaut, dass immer
nur die neuste Suche gestartet wird, und veraltete ignoriert werden.

![](uml/sequence/search.png)
Binary file removed documentation/uml/change_catalog.png
Binary file not shown.
File renamed without changes
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes.
Binary file removed documentation/uml/page_load.png
Binary file not shown.
136 changes: 0 additions & 136 deletions documentation/uml/page_load.puml

This file was deleted.

Binary file removed documentation/uml/resolve_catalog_element.png
Binary file not shown.
Binary file removed documentation/uml/search.png
Binary file not shown.
File renamed without changes.
Binary file added documentation/uml/sequence/change_catalog.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
Binary file added documentation/uml/sequence/language.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 44 additions & 0 deletions documentation/uml/sequence/language.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
@startuml
actor User
control Router <<@angular>> #orange

entity LanguageGuard #lightgreen
entity TranslateService <<Plugin>> #orange

User -> Router: /

activate Router #orange

note over Router
/
end note

Router -> LanguageGuard: canActivate()
activate LanguageGuard #lightgreen
LanguageGuard -> LanguageGuard:
note right
get :lang from cookie, browser or use default
end note
LanguageGuard ->> Router: /:lang
deactivate LanguageGuard

note over Router
/:lang
end note

Router -> LanguageGuard: canActivate(:lang)
activate LanguageGuard #lightgreen

LanguageGuard ->> TranslateService: setLanguage(:lang)
LanguageGuard --> Router: grant access
deactivate LanguageGuard

Router -> Router: redirect to /:lang/ICD

...resolve catalog route...

Router --> User: display
deactivate Router


@enduml
Binary file added documentation/uml/sequence/page_load.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 2290e29

Please sign in to comment.