first commit
This commit is contained in:
commit
2fd7fe24ef
1183
ERModel.pdf
Normal file
1183
ERModel.pdf
Normal file
File diff suppressed because it is too large
Load Diff
30
LICENSE
Normal file
30
LICENSE
Normal 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
10
MyTypes.hs
Normal 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
75
README.md
Normal 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.
|
Loading…
Reference in New Issue
Block a user