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