Yesod - Web development mit Haskell und Shakespear
Go to file
2017-06-28 08:56:59 +02:00
ERModel.pdf first commit 2017-06-28 08:56:59 +02:00
LICENSE first commit 2017-06-28 08:56:59 +02:00
MyTypes.hs first commit 2017-06-28 08:56:59 +02:00
README.md first commit 2017-06-28 08:56:59 +02:00

Ü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!
    -- 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.