first commit

This commit is contained in:
BergesJ 2017-06-28 08:56:59 +02:00
commit 2fd7fe24ef
4 changed files with 1298 additions and 0 deletions

1183
ERModel.pdf Normal file

File diff suppressed because it is too large Load Diff

30
LICENSE Normal file
View File

@ -0,0 +1,30 @@
Copyright Author name here (c) 2017
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Author name here nor the names of other
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

10
MyTypes.hs Normal file
View File

@ -0,0 +1,10 @@
-- @Employment.hs
{-# LANGUAGE TemplateHaskell #-}
module MyTypes where
import Database.Persist.TH
import Prelude
data FSStatus = undefined
deriving (Show, Read, Eq)
derivePersistField "FSStatus"

75
README.md Normal file
View File

@ -0,0 +1,75 @@
Ü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.