# Restaurant Reiskorn ## Installation 1. Herunterladen des aktuellen [Release](https://gogs.sebse.de/Caesar2011/html5-restaurant/releases). 2. Starten der `main.js` im Hauptprojekt-Ordner. - `node path/to/main.js` - Relative und absolute Pfade erlaubt 3. Aufrufen [der lokalen Node-Anwendung](http://localhost:3000) oder [dem gehosteten Service](http://restaurant.sebse.de) ## Login Anmeldedaten finden sich in der `data/users.json`, die, falls Änderungen vorgenommen werden sollen, manuell vor dem Start der nodejs-Anwendung durchgeführt werden müssen. Standard-Login-Daten ```js { "Richard Reis": { "pwd": "secret", "rights": [ null, true, true, true ] }, "Ursula Ulstein": { "pwd": "ultimativ", "rights": [ null, true, true, false ] } } ``` ## Funktionen - Unterschiedliche CRUD-Routinen für Reservierung und Speisekarte - Verwendung von Bootstrap mit minimalistischem, eigenen CSS - Einbindung einer eigenen Schriftart - Implementierung einer eigenen, komplexen Angular-Direktive zur Anzeige einer Google Map - Responsive Design für alle Bildschirmgrößen und nicht JS-Benutzer - Serverseitige Implementierung mit Node.js - Persistierung des Speiseplans und der Reservierungen nach Serverneustart - Login/Speicherung der Nutzer in externer Datei - Eigenen AngularJS-Service und Controller implementiert - Verwendung des AngularJS-Service $http - Name der Tagesreisempfehlung per Agular nachgeladen - Persönliche Formulierungen - Realitätsnahe Sprache ## Dateistruktur ### data - Daten zur Speicherung der - Reservierungen - Speisekarte - Benutzerliste - Mit jeweiligen Beispielwerten zum manuellen Einladen ### modules - eigene nodejs-Module - entspricht im MVC-Modell einem Model - CRUD-Routinen - Reservierungen - Speisekarte - Benutzerliste ### node_modules - von npm installierte Pakete ### public - Client-Assets - CSS - Client-JS - Bilder - Bootstrap/AngularJS - werden über HTML nachgeladen ### views - JADE-Views - HTML-Template-Engine ## Requests | Min. Vers. | Methode | URI | Parameter | Beschreibung | Benötige Rechte | |--------|--------|--------|--------|--------|--------| | 0.1 | GET | / | keine | Zeigt die Startseite an | keine | | 0.1 | GET | /login | keine | Zeigt die Loginseite an | keine | | 0.1 | POST | /login | username:
`[Benutzername]`
password:
`[Passwort des Benutzers]` | Loginversuch | keine | | 0.1 | POST | /login | targetLogout:
`logout` | Logout | keine | | 0.1 | GET | /speisekarte | keine | Zeigt die Speisekarte an | keine (Bearbeitungsfunktionen mit MENU) | | 0.1 | POST | /speisekarte | nametag:
`[f\|d]-[Index in der Liste "food"/"drinks"]-new`
name:
`[Name des Gerichts]`
desc:
`[Beschreibung des Menüeintrags]` | Hinzufügen eines Menüeintrags | MENU | | 0.1 | POST | /speisekarte | nametag:
`[f\|d]-[Index in der Liste "food"/"drinks"]-[Index in der Liste "items"]`
name:
`[Name des Gerichts]`
desc:
`[Beschreibung des Menüeintrags]` | Aktualisieren der Informationen eines Eintrages | MENU | | 0.1 | POST | /speisekarte | nametag:
`[f\|d]-[Index in der Liste "food"/"drinks"]-[Index in der Liste "items"]-del` | Löschen eines Eintages aus der Speisekarte | MENU | | 0.1 | GET | /kontakt | keine | Zeigt die Kontaktseite an | keine:
Reservierungsformular
RESERVATION:
Liste aller eingegangenen Reservierungen | | 1.0 | GET | /kontakt | nametag:
`[Index der Reservierung]` | Öffnet das Fenster zum Bearbeiten eines Eintages | RESERVATION | | 1.0 | POST | /kontakt | nametag:
`new`
name:
`[Name des Reservierenden]`
desc:
`[Kommentarfeld]`
email:
`[gülige E-Mail-Adresse]`
person:
`[positive, natürliche Zahl]`
time:
`^(([01][0-9]\|2[0-4]):[0-5][0-9])$`
date:
`^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Hinzufügen einer Reservierung | keine | | 1.0 | POST | /kontakt | nametag:
`[Index der Reservierung]`
name:
`[Name des Reservierenden]`
desc:
`[Kommentarfeld]`
email:
`[gülige E-Mail-Adresse]`
person:
`[positive, natürliche Zahl]`
time:
`^(([01][0-9]\|2[0-4]):[0-5][0-9])$`
date:
`^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Aktualisieren der Informationen einer Reservierung | RESERVATION | | 1.0 | POST | /kontakt | nametag:
`[Index der Reservierung]-del` | Löschen einer Reservierung aus der Liste | RESERVATION | | 1.1.1 | GET | /api/specialOffer.json | keine | JSON, der aktuell gültigen Angebote | keine |