Wir wollen eine kleine Vue-Applikation bauen, die an die offene Pokémon Rest API angeschlossen ist und verschiedene Funktionalität bietet.
Dies soll nach Möglichkeit Test Driven (TDD) umgesetzt werden.
Das grafische Darstellung ist irrelevant. Die Nutzung von Frameworks wie Material oder Bootstrap ist genau so denkbar wie eine Umsetzung auf reiner HTML/TypeScript-Basis.
Bitte erstelle Dir ein Projekt im neusta GitLab und aktiviere das Issue Board. Hier werden folgende Anforderungen nach dem Konzept der Smart/Dumb Components in kleine Feature Stories übertragen. Jedes Feature soll mittels Merge Request umgesetzt, vom Coach genehmigt (nach Code Review) und schließlich in den master/develop Branch zurückgeführt (gemerged) werden.
-
- Die Software basiert auf der aktuellen Vue 3 Version und wurde mit der Vite aufgesetzt.
- Für die Tests soll das Vitest verwendet werden.
- Die Software soll möglichst wenig externe Abhängigkeiten haben.
Optional**:** Für den Labor-Baustein **Pinia **muss das Framework installiert und genutzt werden
-
-
- Zunächst sehe ich ein erforderliches Eingabefeld (Suche) und einen dazugehörigen Button zum Abschicken des Formulars.
- Nach Eingabe eines Namens (z.B. pikachu) oder einer Zahl (
id) und dem Absenden des Formulars wird ein Datensatz abgerufen. Der Suchbegriff muss dabei exakt eingegeben (Groß- und Kleinschreibung soll egal sein) werden, damit eine Suche erfolgreich ist. Das Suchfeld bleibt nach Absenden des Formulars sichtbar. - Wenn meine Suche keine Ergebnisse ergibt wird eine Fehlermeldung angezeigt.
- Während des Ladevorgangs soll ein grafischer Indikator angezeigt werden.
-
-
Der abgefragte Datensatz wird in einer Detailansicht dargestellt. Diese zeigt mindestens folgende Informationen:
namebase_experienceheightweightsprites.front_default
-
-
- In der Detailansicht des Pokémon-Datensatzes befindet sich ein Button zum "fangen" des Pokémon. Klicke ich darauf, wird dieses Pokémon (entspricht einer Art Warenkorb) gespeichert.
- Irgendwo auf der Seite befindet sich ein
Pokéball Icon und zeigt die Anzahl gefangener Pokémon an.
- Habe ich ein Pokémon (z.B. Pikachu) bereits gefangen, ist der Button zum hinzufügen/fangen in der Detailansicht inaktiv. Jedes Pokémon kann lediglich ein einziges Mal gefangen werden.
-
- Der Pokéball ist auch nach einem Refresh (F5) der Seite oder Schließen des Browsers noch mit den gleichen Daten gefüllt (Local Storage).
- Klicke ich auf den Pokéball, erscheint in einem Modal eine Auflistung der bereits gefangenen Pokémon als Liste (
nameund Thumbnail vonsprites.front_default). - An jedem Listeneintrag ist ein Icon zum "freilassen" des jeweiligen Pokémon. Bei Klick wird dieses aus der Liste entfernt.
- Habe ich alle Pokémon aus der Liste entfernt, schließt sich das Modal automatisch.
- Klicke ich auf ein Pokémon in der Liste, erscheint die in Punkt 2b erstellte Detailansicht.
-
-
- Für alle Komponenten und Services existieren Unit Tests.
- Die Testabdeckung sollte stets über 90% liegen.
Je nach Absprache mit dem zuständigen Coach sollen folgende Zusatzanforderungen erfüllt werden:
-
-
Die Detailansicht wird um ein Akkordeon Element mit den folgenden API Informationen erweitert:
- Abilities
- Forms
- Moves
-
Bei Klick auf einen Eintrag werden die entsprechenden weiterführenden Informationen abgerufen und mindestens folgende Werte angezeigt (
die Daten sollen einmalig abgerufen werden und nicht bei jedem Klick):
-
Abilities
namegenerationshort_effect
-
Moves
nameaccuracychance_effectppprioritypowerdamage_class
-
-
-
-
Listeneinträge (Pokémon) sollen sowohl einzeln als auch alle gleichzeitig selektierbar sein (per Checkbox).
-
Wenn mindestens zwei Pokémon ausgewählt sind, erscheint ein Button zum Vergleich der Pokémon auf Basis ihrer Werte.
-
Bei Klick auf den Button werde ich auf eine Seite /compare geleitet.
-
Auf dieser Seite werden die selektierten Pokémon mit folgenden Werten nebeneinander dargestellt:
base_experienceheightweight- Anzahl der Abilities
- Anzahl der Moves
-
In der Darstellung soll der höchste (grün) und der niedrigste Wert (rot) farblich markiert werden.
-
Ebenfalls soll sich auf der Seite ein Link befinden, der den Nutzer wieder zurück zur Ausgangsseite mit geöffnetem Modal führt.
-