77 lines
3.5 KiB
Markdown
77 lines
3.5 KiB
Markdown
Übungszettel 9
|
||
==============
|
||
|
||
Pushen Sie nach der Bearbeitung jeder Aufgabe Ihre Ergebnisse.
|
||
|
||
Issue 1
|
||
-------
|
||
Führen Sie die folgenden Befehle aus.
|
||
Diese erstellen Ihnen ein ausführbares Yesod-Grundgerüst.
|
||
Grundgerüst:
|
||
|
||
- $ stack new uebung9 --bare yesod-sqlite
|
||
|
||
Kompilieren mit yesod:
|
||
- $ stack build yesod-bin
|
||
|
||
Starten des Servers:
|
||
- $ stack exec -- yesod devel
|
||
|
||
Öffnen Sie Ihrem Browser mit der Domain `http://localhost:3000/`. Wenn alles geklappt hat, sollten Sie hier bereits die Möglichkeit haben, sich mit einem Dummy-Account einzuloggen und eine Profilseite zu öffnen.
|
||
|
||
Long version:
|
||
https://www.youtube.com/watch?v=rsozCEMQdSY
|
||
|
||
|
||
Issue 2
|
||
-------
|
||
Verschieben Sie das mitgegebene Modul `MyTypes.hs` in den `src/`-Ordner und importieren Sie es in der `Model.hs`
|
||
|
||
In der Datei database-model.xml befindet sich ein ER-Modell.
|
||
In `config/models` werden alle Entitäten definiert, die Ihre Datenbank kennen soll.
|
||
Pflegen Sie die Entitäten des ER-Modells sinnvoll in `config/models` ein.
|
||
|
||
Hinweise:
|
||
|
||
- Ganz ähnlich wie Sie es von der `record syntax` her kennen, hat hier jede Entität beliebig viele Felder,
|
||
für die Sie Name und Typ festlegen müssen.
|
||
|
||
- Für textuelle Felder, nutzen Sie den Typ `Text`. Falls ein Feld auch leer sein darf, fügen Sie ein `Maybe` hinzu.
|
||
|
||
- Für jede Entität werden automatisch Id-Typen definiert (z.B. `UserId` für die Entität `User`), die Sie benutzen können, um bestimmte Kardinalitäten
|
||
zu erzwingen.
|
||
|
||
- Wenn Sie selber definierte Typen verwenden wollen, um die Ausprägungen eines Entity-Feldes festzulegen, definieren Sie diese in der mitgegebenen Datei `MyTypes.hs`.
|
||
|
||
Issue 3
|
||
-------
|
||
|
||
a) Neues Feature: Auf der neuen Seite `Timeline` können eingelogte User Nachrichten posten. Die Posts werden in chronologischer Reihenfolge angezeigt.
|
||
|
||
TODO:
|
||
- `config/routes`: Legen Sie hier eine neue Route an.
|
||
- `Foundation.hs`:
|
||
|
||
- Ergänzen Sie die Funktionen, in denen auf Routen-Konstruktoren pattern-gematcht wird.
|
||
- Die `Timeline` soll nur für autorisierte (d.h. eingeloggte) User sichtbar sein.
|
||
- Sorgen Sie dafür, dass `Timeline` als Menüpunkt im defaultLayout erscheint.
|
||
- `src/Handler/`: Legen Sie ein Handler-Modul `Timeline.hs` an.
|
||
- `cabal`: Fügen Sie den Handler als `exposed-module` hinzu.
|
||
- `src/Application.hs`: Importieren Sie den neuen Handler
|
||
- `src/Handler/Timeline.hs`:
|
||
|
||
- Erstellen Sie für jede `http-Methode`, für die Sie die neue Route definiert haben, eine entsprechende Handler-Funktion in dem neuen Handler-Modul.
|
||
- Bennenen Sie ihre Handler-Funktionen gemäß dem Schema: http-Methode + Routenkonstruktor.
|
||
- Inhaltlich können Sie sich stark an der Vorlesung orientieren! Schauen Sie sich auch die vorgegeben Handler an.
|
||
- Man kann hamlet-Code etc. auch in template-Files auslagern. Sehen Sie sich hierzu beispielsweise `src/Handler/Profile.hs` und das eingebundene Template `templates/profile.hamlet` an.
|
||
|
||
b) Neues Feature: Auf der Seite `All Users` werden alle jemals eingelogten User angezeigt. Mit einem Klick auf einen Usernamen wird man auf die zugehörige Timeline weitergeleitet.
|
||
|
||
Issue 4
|
||
-------
|
||
Never gonna give U up, never gonna let ya down – Friendship :D
|
||
|
||
Die Seite `All Users` soll nun auch erlauben, Freundschaftsanfragen abzuschicken. Auf dieser soll man einem User eine Freundschaftsanfrage stellen können.
|
||
Freundschaftsanfrage soll dem entsprechenden User auf seiner Profilseite angezeigt werden, wo er sie annehmen oder ablehnen kann.
|
||
Timelines sollen nur noch für befreundete User sichtbar sein.
|