Apostolos Fanakis
4 years ago
11 changed files with 291 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||
\section{Εισαγωγή} |
|||
|
|||
Η παρούσα εργασία εκπονήθηκε στα πλαίσια του μαθήματος ``Βάσεις Δεδομένων'' του ενάτου (9\textsuperscript{ου}) εξαμήνου του τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Αριστοτέλειου Πανεπιστημίου Θεσσαλονίκης. Ζητούμενο του τρίτου παραδοτέου της εργασίας είναι υλοποίηση ενός συστήματος διεπαφής χρήστη (front end/UI) για τη βάση δεδομένων που σχεδιάστηκε και υλοποιήθηκε σε προηγούμενα παραδοτέα. |
|||
|
|||
Για το παραδοτέο αυτό έγινε ανάπτυξη κώδικα σε δύο μέρη. Το πρώτο μέρος αφορά ένα Restful API για τη βάση δεδομένων γραμμένο σε python, χρησιμοποιώντας κυρίως τα modules Django και Django Rest Framework, καθώς και άλλα λιγότερο σημαντικά modules. Το δεύτερο μέρος είναι η ανάπτυξη κώδικα σε Java, μίας εφαρμογής για Android smartphones η οποία αποτελεί τη γραφική διεπαφή. |
|||
|
|||
Όλος ο κώδικας αυτού καθώς και των προηγούμενων παραδοτέων, όπως και λοιπά αρχεία και βασικές πληροφορίες (README, SETUP, LICENSE) είναι διαθέσιμα στο \href{https://gitlab.com/Apostolof/flavours-without-borders}{online repository του project}. |
@ -0,0 +1,25 @@ |
|||
\section{Κάλυψη προδιαγραφών} |
|||
|
|||
Στην τελική έκδοση της εφαρμογής υπάρχουν οι λειτουργίες της κύριας δραστηριότητας ενός πελάτη δηλαδή: |
|||
\begin{itemize} |
|||
\item Εύρεση καταστημάτων στον πλήρη χάρτη και φιλτράρισμα των αποτελεσμάτων με βάση το είδος καταστήματος, την απόσταση από την θέση του χρήστη ή τις θερμίδες των πιάτων που περιέχει |
|||
\item Πρόσβαση στα μενού των καταστημάτων, τα πιάτα και ποτά, τα συστατικά και τις κριτικές αυτών |
|||
\item Δημιουργία νέων κριτικών |
|||
\item Πρόταση προσθήκης νέου καταστήματος, πιάτου, ποτού και δίαιτας στη βάση |
|||
\item Προσθήκη νέων συστατικών στη βάση |
|||
\end{itemize} |
|||
|
|||
Όσων αφορά τις δυνατότητες τις οποίες έχει ένας διαχειριστής υλοποιήθηκαν οι εξής: |
|||
\begin{itemize} |
|||
\item Αποδοχή προτάσεων των χρηστών για νέα καταστήματα, πιάτα, ποτά και δίαιτες |
|||
\item Απευθείας προσθήκη νέου καταστήματος, πιάτου, ποτού και δίαιτας στη βάση |
|||
\end{itemize} |
|||
|
|||
Δεν υλοποιήθηκαν οι εξής λειτουργίες: |
|||
\begin{itemize} |
|||
\item Απόρριψη προτάσεων χρηστών (οι μη έγκυρες προτάσεις χρηστών παραμένουν στη βάση ως σκουπίδια) |
|||
\item Διαγραφή των σχολίων και κριτικών που έχουν κάνει οι ίδιοι οι χρήστες, αλλά και αφαίρεση τους από διαχειριστές |
|||
\item Αποκλεισμός (ban) χρηστών |
|||
\end{itemize} |
|||
|
|||
Η κατηγορία χρηστών που αφορά τους ιδιοκτήτες δεν υλοποιήθηκε. |
@ -0,0 +1,80 @@ |
|||
\section{Στήσιμο API και εγκατάσταση εφαρμογής} |
|||
|
|||
Παρακάτω περιγράφονται η διαδικασία στησίματος της εφαρμογής API που είναι απαραίτητη για την λειτουργία της εφαρμογής Android καθώς και τα βήματα για το χτίσιμο της Android εφαρμογής στο περιβάλλον Android Studio και η εγκατάσταση της σε κινητό. |
|||
|
|||
Οι οδηγίες αυτές μπορούν να βρεθούν και στον \href{https://gitlab.com/Apostolof/flavours-without-borders/blob/master/UI/Database\%20API/SETUP.md}{οδηγό εγκατάστασης στο online repository} του κώδικα σε μία πιο συνοπτική έκδοση (στα αγγλικά). |
|||
|
|||
Αρχικά πρέπει να γίνει λήψη του κώδικα του project από το repository χρησιμοποιώντας το git: |
|||
\begin{lstlisting}[language=bash] |
|||
git clone https://gitlab.com/Apostolof/flavours-without-borders.git |
|||
\end{lstlisting} |
|||
|
|||
Έπειτα στήνεται η εφαρμογή API, ο κώδικας της οποία βρίσκεται στη διαδρομή: |
|||
\begin{quote} |
|||
\texttt{flavoursWithoutBorders/UI/Database API/} |
|||
\end{quote} |
|||
|
|||
Οι παρακάτω οδηγίες αφορούν Debian based, Linux συστήματα. Ωστόσο το λογισμικό θα πρέπει να λειτουργεί σε οποιοδήποτε λειτουργικό σύστημα, με μικρές αλλαγές στη διαδικασία εγκατάστασης. |
|||
|
|||
\subsection{Προαπαιτούμενα} |
|||
|
|||
Για να εκτελεστούν οι παρακάτω εντολές θα πρέπει το σύστημα στο οποίο δουλεύει ο αναγνώστης να έχει εγκατεστημένο το λογισμικό MySQL server και να υποστηρίζεται η εκτέλεση κώδικα python 3. Επίσης πρέπει να υπάρχει εγκατεστημένο το λογισμικό pip 3. |
|||
|
|||
Τέλος απαιτείται η εγκατάσταση των πακέτων \texttt{virtualenv}, \texttt{python3-dev} και \texttt{libmysqlclient-dev}, χρησιμοποιώντας τις εντολές: |
|||
|
|||
\begin{lstlisting}[language=bash] |
|||
apt install virtualenv |
|||
apt-get install python3-dev libmysqlclient-dev |
|||
\end{lstlisting} |
|||
|
|||
Αν είναι επιθυμητή η πρόσβαση στο API μέσω της δημόσιας IP του συστήματος στο οποίο εκτελείται το πρόγραμμα θα πρέπει να ανοίξει η πόρτα \texttt{8181} του router και να εξασφαλιστεί ότι κανένα firewall που τυχόν είναι εγκατεστημένο δεν θα αποκλείσει την επικοινωνία σε αυτή τη πόρτα. |
|||
|
|||
\subsection{Στήσιμο βάσης δεδομένων και προγράμματος API} |
|||
|
|||
Αρχικά πρέπει να γίνει απεγκατάσταση του πρόσθετου password\_validation της MySQL διότι προκαλεί προβλήματα στην δημιουργία χρηστών της βάσης. Για να γίνει αυτό, πρέπει να γίνει σύνδεση με τον root λογαριασμό στον server της MySQL: |
|||
\begin{lstlisting}[language=bash] |
|||
mysql -h localhost -u root -p |
|||
\end{lstlisting} |
|||
και απεγκατάσταση του πρόσθετου με την εντολή: |
|||
\begin{lstlisting}[language=SQL] |
|||
UNINSTALL PLUGIN validate_password; |
|||
\end{lstlisting} |
|||
|
|||
Τέλος πρέπει να εκτελεστεί το bash script που έχει γραφτεί και αναλαμβάνει το υπόλοιπο της εγκατάστασης, τρέχοντας τις εντολές: |
|||
\begin{lstlisting}[language=bash] |
|||
cd flavoursWithoutBorders/UI/Database\ API/ |
|||
./install.sh |
|||
\end{lstlisting} |
|||
|
|||
Το script θα ζητήσει την είσοδο μίας IP την οποία θα χρησιμοποιήσει για το στήσιμο του server. Αυτή μπορεί να είναι είτε η δημόσια (public IP) του συστήματος, αν έγινε προηγουμένως άνοιγμα της πόρτας 8181, είτε η τοπική (LAN IP). |
|||
|
|||
Το script δημιουργεί τη βάση \texttt{flavoursWithoutBorders}, δημιουργεί ένα εικονικό περιβάλλον (virtual environment) python 3, εγκαθιστά τοπικά όλα τα απαιτούμενα python modules, συνδέει την εφαρμογή API με την βάση δεδομένων και δημιουργεί έναν superuser. Τέλος ξεκινά τον server στον οποίο τρέχει το API. |
|||
|
|||
Όταν ο python server του API ξεκινήσει, ο αναγνώστης έχει πρόσβαση στο API μέσα από τις διευθύνσεις του admin panel και της λίστας διαθέσιμων εντολών του API. |
|||
\begin{lstlisting}[language=bash] |
|||
sensible-browser YOUR_IP:8181/admin/ |
|||
sensible-browser YOUR_IP:8181/api/ |
|||
\end{lstlisting} |
|||
όπου με τον όρο \texttt{YOUR\_IP} εννοείται η IP που επιλέχθηκε για χρήση σε προηγούμενο βήμα. |
|||
|
|||
\subsection{Χτίσιμο και εγκατάσταση της Android εφαρμογής} |
|||
|
|||
Για την εγκατάσταση της Android εφαρμογής δίνονται δύο επιλογές, το χτίσιμο της ή η χρήση του έτοιμου apk που διατίθεται μαζί με τον κώδικα. |
|||
|
|||
Για το χτίσιμο (build) της Android εφαρμογής απαιτείται η εγκατάσταση τουλάχιστον του Android SDK. Οδηγίες για τη διαδικασία δίνονται από την Google. Παρακάτω θα περιγραφεί η διαδικασία χρησιμοποιώντας το λογισμικό Android Studio. |
|||
|
|||
Μετά την εκκίνηση του λογισμικού, εμφανίζεται η οθόνη καλωσορίσματος. Αν υπάρχει ήδη ανοιχτό κάποιο project, το κλείνουμε μέσω της επιλογής του μενού File → Close Project. Από το μενού επιλέγεται το ``Open an existing Android Studio project''. Στο παράθυρο που εμφανίζεται, γίνεται επιλογή του φακέλου του project στη διαδρομή: |
|||
\begin{quote} |
|||
\texttt{flavoursWithoutBorders/UI/AndroidApp/flavoursWithoutBorders/} |
|||
\end{quote} |
|||
|
|||
Προσοχή στην ύπαρξη του \texttt{\textbf{flavoursWithoutBorders/}} στο τέλος του path! Η διαδρομή δεν λήγει στο \texttt{AndroidApp/}. |
|||
|
|||
Τέλος συνδέεται στο σύστημα με USB ένα Android smartphone και επιλέγεται από το μενού Run → Run 'app'. Στο μενού που εμφανίζεται επιλέγεται η σωστή συσκευή και γίνεται κλικ στο OK. |
|||
|
|||
Τονίζεται εδώ ότι κατά τη διαδικασία αυτή απαιτείται η λήψη πολλών, μεγάλου μεγέθους αρχείων, συνολικού μεγέθους αρκετών Gigabytes, κάτι που μπορεί να είναι αποτρεπτικό. Για το λόγο αυτό δίνεται ένα έτοιμο signed apk της εφαρμογής για εύκολη εγκατάσταση. Το apk μπορεί να βρεθεί στην διαδρομή: |
|||
\begin{quote} |
|||
\texttt{flavoursWithoutBorders/UI/release.apk} |
|||
\end{quote} |
|||
|
|||
Την πρώτη φορά που ανοίγει η εφαρμογή ζητείται από τον χρήστη η IP του API server. Θα πρέπει να δοθεί η IP η οποία χρησιμοποιήθηκε κατά το στήσιμο του server. |
@ -0,0 +1,37 @@ |
|||
\section{Σενάριο δοκιμής της εφαρμογής} |
|||
|
|||
Δημιουργία νέου λογαριασμού χρήστη: Ο χρήστης βρίσκεται στην αρχική οθόνη σύνδεσης σε υπάρχων λογαριασμό αλλά πατάει στο κείμενο ``or sign up'', εάν είναι συνδεδεμένος σε κάποιο λογαριασμό κάνει πρώτα Logout, συμπληρώνει τα στοιχεία του και μετά πατάει το κουμπί (SIGN UP). |
|||
|
|||
Σύνδεση χρήστη σε υπάρχων λογαριασμό: Ο χρήστης βρίσκεται στην αρχική οθόνη σύνδεσης σε υπάρχων λογαριασμό, συμπληρώνει το Username του ή το e-mail του και τον κωδικό του και πατάει το κουμπί (LOGIN). |
|||
|
|||
Εμφάνιση επιλογών της εφαρμογής: Ο χρήστης πατάει το πάνω αριστερά κουμπί ή κάνει ``Swipe Right'' από την αριστερή άκρη της οθόνης για την εμφάνιση των επιλογών. |
|||
|
|||
Πλοήγηση στα διαθέσιμα εστιατόρια της βάσης: Ο χρήστης κάνει εμφάνιση επιλογών πατάει το κουμπί ``Home'' και πλέον βρίσκεται στην οθόνη της λίστας των καταστημάτων. Ο χρήστης μπορεί να κάνει πλοήγηση στο χάρτη της εφαρμογής. Έπειτα εφαρμόζει κάποιο φίλτρο στα διαθέσιμα καταστήματα εάν αυτός/η επιθυμεί. Ο χρήστης επιλέγει ένα από τα διαθέσιμα καταστήματα της λίστας καταστημάτων. |
|||
|
|||
Πλοήγηση στο χάρτη της εφαρμογής: Ο χρήστης βρίσκεται στην οθόνη της λίστας των καταστημάτων και πατάει το 2ο κουμπί στην πάνω δεξιά μεριά της οθόνης ή κάνει ``Swipe Left'' από την δεξιά άκρη της οθόνης. Έπειτα μπορεί να επιστρέψει ξανά στη λίστα των καταστημάτων πατώντας το 2ο κουμπί στην πάνω δεξιά μεριά της οθόνης ή το φυσικό κουμπί ``Πίσω''. |
|||
|
|||
Φιλτράρισμα διαθέσιμων καταστημάτων: Ο χρήστης βρίσκεται στην λίστα καταστημάτων ή στον χάρτη προβολής των διαθέσιμων καταστημάτων και πατάει το 1ο κουμπί στην πάνω δεξιά μεριά της οθόνης. Κατά το φιλτράρισμα ο χρήστης μπορεί να επιλέξει 1. συγκεκριμένα είδη καταστημάτων ή 2. καταστήματα τα οποία έχουν απόσταση σε μέτρα από την θέση του μικρότερη ή ίση της τιμής που αυτός εισάγει στο αναδυόμενο παράθυρο (η εφαρμογή κάποιες φορές δεν ανακτά την θέση της συσκευής οπότε η λειτουργία αυτή ενδέχεται να μην δουλεύει πάντα) ή 3. καταστήματα τα οποία προσφέρουν πιάτα των οποίων οι θερμίδες δεν ξεπερνούν μια τιμή την οποία ο χρήστης εισάγει στο αναδυόμενο παράθυρο. |
|||
|
|||
Προσθήκη/Πρόταση προσθήκης νέου καταστήματος: Ο χρήστης βρίσκεται στην οθόνη της λίστας των καταστημάτων και πατάει το κουμπί (+). Έπειτα μετακινεί το στίγμα στο χάρτη στη θέση στην οποία βρίσκεται το κατάστημα, εισάγει το όνομα του καταστήματος, επιλέγει είδος καταστήματος και εισάγει το ωράριο λειτουργίας του, τέλος πατάει το κουμπί (ADD RESTAURANT). |
|||
|
|||
Προσθήκη/Πρόταση προσθήκης νέου πιάτου/ποτού σε κατάστημα: Ο χρήστης επιλέγει ένα κατάστημα έπειτα από πλοήγηση στα διαθέσιμα καταστήματα, μεταβαίνει στην καρτέλα FOOD/DRINK και και πατάει το κουμπί (+). Έπειτα εισάγει το όνομα του πιάτου/ποτού και μια περιγραφή του. Στην συνέχεια προσθέτει τα συστατικά τα οποία περιέχει το πιάτο/ποτό και τέλος πατάει το κουμπί (ADD FOOD/DRINK) |
|||
|
|||
Προσθήκη νέου συστατικού στη βάση: Ο χρήστης μεταβαίνει στην οθόνη της λίστας των συστατικών της βάσης αφού κάνει εμφάνιση επιλογών της εφαρμογής και πατήσει το κουμπί Ingredients. Έπειτα πατάει το κουμπί (+), εισάγει το όνομα του συστατικού και εάν αυτό περιέχει αλκοόλ, τέλος πατάει το κουμπί (ADD INGREDIENT). |
|||
|
|||
Προσθήκη/Πρόταση προσθήκης νέας δίαιτας στη βάση: Ο χρήστης μεταβαίνει στην οθόνη της λίστας των δίαιτων της βάσης αφού κάνει εμφάνιση επιλογών της εφαρμογής και πατήσει το κουμπί Diets. Έπειτα πατάει το κουμπί (+), εισάγει το όνομα της δίαιτας, μια περιγραφή της και την λίστα των απαγορευμένων συστατικών της δίαιτας. Τέλος πατάει το κουμπί (ADD DIET). |
|||
|
|||
Τροποποίηση της λίστας των δίαιτων που ακολουθεί ο χρήστης: Ο χρήστης μεταβαίνει στην οθόνη της λίστας των δίαιτων της βάσης και πατάει το κουμπί προσθήκης για τις δίαιτες τις επιθυμεί να ακολουθήσει. Για τις δίαιτες τις οποίες θέλει να σταματήσει να ακολουθεί πατάει το κουμπί της διαγραφής. |
|||
|
|||
Τροποποίηση της λίστας απαγορευμένων συστατικών του χρήστη: Ο χρήστης μεταβαίνει στην οθόνη της λίστας των συστατικών της βάσης και πατάει το κουμπί προσθήκης/διαγραφής για τα συστατικά τα οποία θέλει να προσθέσει/αφεραίσει από τη λίστα των απαγορευμένων του συστατικών |
|||
|
|||
Αξιολόγηση καταστήματος: Ο χρήστης επιλέγει ένα κατάστημα έπειτα από πλοήγηση στα διαθέσιμα καταστήματα, μεταβαίνει στην καρτέλα RATINGS και πατάει το κουμπί (+). Έπειτα επιλέγει την βαθμολογία αξιολόγησης (1-5) και την προσβασιμότητα σε ΑμΕΑ, επιλέγει προαιρετικά μια δίαιτα με βάση την οποία αξιολογεί το κατάστημα και εισάγει προαιρετικά ένα σχόλιο αξιολόγησης και τέλος πατάει το κουμπί (RATE) |
|||
|
|||
Αξιολόγηση πιάτου/ποτού καταστήματος: Ο χρήστης επιλέγει ένα κατάστημα έπειτα από πλοήγηση στα διαθέσιμα καταστήματα, μεταβαίνει στην καρτέλα FOOD/DRINK και επιλέγει το πιάτο/ποτό το οποίο επιθυμεί να αξιολογήσει, μεταβαίνει στην καρτέλα RATINGS και πατάει το κουμπί (+). Έπειτα επιλέγει την βαθμολογία αξιολόγησης (1-5) και το μέγεθος της μερίδας του πιάτου/ποτού και εισάγει προαιρετικά ένα σχόλιο αξιολόγησης, τέλος πατάει το κουμπί (RATE) |
|||
|
|||
Αποσύνδεση χρήστη: Ο χρήστης εκτελεί την εμφάνιση επιλογών και έπειτα πατάει το κουμπί (Logout) |
|||
|
|||
Αλλαγή ρόλου ενός χρήστη σε διαχειριστή: Ο sysadmin του συστήματος συνδέεται στην ιστοσελίδα διαχείρισης της βάσης Django Administration με διεύθυνση IP:8181/admin. Μεταβαίνει στην τροποποίηση του πίνακα Users και επιλέγει τον χρήστη του οποίου θέλει να αλλάξει τον ρόλο και αλλάζει το χαρακτηριστικό ``Role'' του χρήστη από ``Role object(0)'' σε ``Role object(1)''. |
|||
|
|||
Αποδοχή των προτάσεων προσθήκης καταστημάτων, πιάτων/ποτών και δίαιτων από διαχειριστές: Όταν ο διαχειριστής μεταβαίνει στις οθόνες της λίστας των καταστημάτων, λίστας των πιάτων/ποτών ενός καταστήματος ή της λίστας των δίαιτων της βάσης μπορεί να δει όλα τα αντικείμενα της λίστας, ακόμη και όσα δεν έχουν εγκριθεί. Για τα αντικείμενα τα οποία δεν έχουν εγκριθεί ακόμη υπάρχει ένα κουμπί έγκρισης το οποίο ο διαχειριστής μπορεί να πατήσει για όποια αντικείμενα θεωρεί πως είναι έγκυρα. |
|||
|
|||
Σημείωση: Για τις λειτουργίες προσθήκης οι όποιες αναφέρονται ως πρόταση προσθήκης, όταν οι ενέργειες εκτελούνται από απλούς χρήστες το αποτέλεσμα στην όψη των απλών χρηστών για τις νέες προτάσεις θα είναι διαθέσιμο όταν κάποιος διαχειριστής εγκρίνει αυτή την πρόταση. |
@ -0,0 +1,18 @@ |
|||
\section{Γνωστά bugs, μερικές υλοποιήσεις και άλλα προβλήματα} |
|||
|
|||
Παρακάτω παρατίθενται μερικά γνωστά bugs της εφαρμογής, features των οποίων η υλοποίηση δεν ολοκληρώθηκε και features τα οποία είναι κοινά σε εφαρμογές ή αναμενόμενο να υπάρχουν αλλά δεν υλοποιήθηκαν. Τα bugs και οι ελλείψεις αυτές θεωρήθηκαν εκτός του πεδίου εφαρμογής της εργασίας. |
|||
|
|||
Έλλειψη progress bars ή άλλης μορφής feedback για την πρόοδο των requests. Κατά την αναμονή απάντησης από τον server στα requests που κάνει η εφαρμογή δεν δίνεται κανένα οπτικό feedback για την εκκίνηση ή τη πρόοδο των requests. Αυτό μπορεί να οδηγήσει τον χρήστη εσφαλμένα στην εντύπωση ότι η εφαρμογή δεν λειτουργεί. |
|||
|
|||
Ελλιπής υλοποίηση των filters. Από τις τρεις μεθόδους φιλτραρίσματος των διαθέσιμων καταστημάτων που δίνονται από την εφαρμογή (με βάση τον τύπο, την απόσταση και τη διάθεση φαγητών με άνω όριο κάποιες θερμίδες) μόνο η μία λειτουργεί σωστά πάντα, το φιλτράρισμα με βάση τον τύπο. Το φιλτράρισμα με βάση την απόσταση λειτούργησε σωστά μόνο σε virtual device κατά το development και testing της εφαρμογής. Πιθανόν να λειτουργεί και σε πραγματικές συσκευές με έκδοση Android τουλάχιστον ίση με 8.0. Το φιλτράρισμα με βάση τη διάθεση φαγητών με άνω όριο κάποιες μερίδες δεν υλοποιήθηκε στη πλευρά του API (τουλάχιστον μέχρι τη παράδοση της εργασίας). |
|||
|
|||
Logout fails. Η λειτουργία της αποσύνδεσης χρήστη χρειάζεται να εκκινηθεί από τον χρήστη δύο φορές για να πετύχει. Ωστόσο κάποιες φορές δεν διαγράφονται τα αποθηκευμένα cookies, κάτι που προκαλεί προβλήματα στην μετέπειτα επανασύνδεσή του ή εγγραφή με νέο λογαριασμό. Στη περίπτωση αυτή πρέπει να γίνει διαγραφή των αποθηκευμένων δεδομένων μέσω των ρυθμίσεων του Android και της επιλογής ``clear data''. |
|||
|
|||
Ο τύπος χρήστη δεν ανανεώνεται. Σε περίπτωση που κάποιος χρήστης αλλάξει τύπο (απλός χρήστης που γίνεται moderator ή το αντίθετο) η εφαρμογή δεν αντιλαμβάνεται αυτόματα την αλλαγή. Για το λόγο αυτό πρέπει να γίνει αποσύνδεση και επανασύνδεση του χρήστη. Αν αυτό δεν πετύχει, πρέπει όπως και για τα logout fails να γίνει εκκαθάριση των δεδομένων της εφαρμογής. |
|||
|
|||
Μη εμφάνιση των προστιθέμενων εγγραφών των διαχειριστών απευθείας. Όταν ένας διαχειριστής προσθέτει ένα νέο κατάστημα, φαγητό, ποτό ή δίαιτα γίνεται απευθείας αποδεκτό από τη βάση. Ωστόσο για να εμφανιστεί στην εφαρμογή ο διαχειριστής πρέπει να φύγει από την οθόνη του αντικειμένου και να ξαναμπεί ώστε να φορτωθεί η αλλαγμένη λίστα εστιατορίων/φαγητών/ποτών/δίαιτων μετά από νέο request στον server. Στη περίπτωση της οθόνης με τη λίστα των εστιατορίων θα πρέπει είτε να κλείσει η εφαρμογή και να ανοίξει ξανά είτε να πατηθεί το κουμπί ``Clear filters'' από το μενού των φίλτρων (ακόμα και αν δεν υπάρχει κανένα φίλτρο σε εφαρμογή). |
|||
\begin{quote}{Roy Trenneman} |
|||
---Have you tried turning it off and on again? |
|||
\end{quote} |
|||
|
|||
Η απευθείας μετάβαση από τις δραστηριότητες με τις δίαιτες και τα υλικά στο προφίλ χρήστη αποτυγχάνει μερικές φορές. Συνήθως, όταν από την οθόνη με τις δίαιτες ή τα υλικά, μία δίαιτα ή ένα υλικό διαγραφεί από τη λίστα αυτών που ακολουθεί ή απαγορεύει ο χρήστης και έπειτα γίνει προσπάθεια απευθείας μετάβασης (μέσω του μενού επιλογών) στο προφίλ του, τότε η εφαρμογή αποτυγχάνει και κλείνει. |
@ -0,0 +1,36 @@ |
|||
\section{Απεγκατάσταση, επαναφορά συστήματος μετά το στήσιμο του API} |
|||
|
|||
Για την επαναφορά όλων των αλλαγών που έγιναν στο σύστημα κατά το στήσιμο του API πρέπει να ακολουθηθούν οι παρακάτω οδηγίες. |
|||
|
|||
\begin{enumerate} |
|||
\item |
|||
Διαγραφή των αρχείων που δημιουργήθηκαν από το Django. |
|||
\begin{lstlisting}[language=bash] |
|||
cd flavoursWithoutBorders/UI/Database\ API/ |
|||
rm -rf hyrieus/env |
|||
rm -rf hyrieus/flavoursAPI/hyrieus/migrations |
|||
\end{lstlisting} |
|||
|
|||
\item |
|||
Επαναφορά αλλαγών που έγιναν στο αρχείο settings.py από το script εγκατάστασης. |
|||
\begin{lstlisting}[language=bash] |
|||
git checkout -- hyrieus/flavoursAPI/settings.py |
|||
\end{lstlisting} |
|||
|
|||
\item |
|||
Επανεγκατάσταση του πρόσθετου password\_validation στον MySQL server. Σύνδεση ως root user: |
|||
\begin{lstlisting}[language=bash] |
|||
mysql -h localhost -u root -p |
|||
\end{lstlisting} |
|||
|
|||
και εκτέλεση της εντολής: |
|||
\begin{lstlisting}[language=SQL] |
|||
INSTALL PLUGIN validate_password SONAME 'validate_password.so'; |
|||
\end{lstlisting} |
|||
|
|||
\item |
|||
Διαγραφή της βάσης δεδομένων. |
|||
\begin{lstlisting}[language=bash] |
|||
mysql -h localhost -u root -p -e "DROP DATABASE IF EXISTS flavoursWithoutBorders;" |
|||
\end{lstlisting} |
|||
\end{enumerate} |
@ -0,0 +1 @@ |
|||
\tableofcontents |
@ -0,0 +1,28 @@ |
|||
\usepackage{color} |
|||
|
|||
\definecolor{codegreen}{rgb}{0,0.6,0} |
|||
\definecolor{codegray}{rgb}{0.5,0.5,0.5} |
|||
\definecolor{codepurple}{rgb}{0.58,0,0.82} |
|||
\definecolor{backcolour}{rgb}{0.95,0.95,0.92} |
|||
\definecolor{light-gray}{gray}{0.95} |
|||
|
|||
\lstdefinestyle{mystyle}{ |
|||
backgroundcolor=\color{light-gray}, |
|||
commentstyle=\color{codegreen}, |
|||
keywordstyle=\color{magenta}, |
|||
numberstyle=\tiny\color{codegray}, |
|||
stringstyle=\color{codepurple}, |
|||
basicstyle=\footnotesize\ttfamily, |
|||
breakatwhitespace=false, |
|||
breaklines=true, |
|||
captionpos=b, |
|||
keepspaces=true, |
|||
numbers=none, |
|||
numbersep=5pt, |
|||
showspaces=false, |
|||
showstringspaces=false, |
|||
showtabs=false, |
|||
tabsize=2 |
|||
} |
|||
|
|||
\lstset{style=mystyle} |
@ -0,0 +1 @@ |
|||
\maketitle |
@ -0,0 +1,58 @@ |
|||
\documentclass{article} |
|||
\usepackage{geometry} |
|||
\geometry{a4paper, top=2cm, bottom=2cm, left=2cm,right=2cm} |
|||
\usepackage{fontspec} |
|||
\setmainfont{Lato} |
|||
%\setmonofont{Consolas} |
|||
% \usepackage[nonumeralsign]{xgreek} |
|||
\usepackage{fancyhdr} |
|||
\usepackage{hyperref} |
|||
\usepackage{enumitem} |
|||
\usepackage{cite} |
|||
\usepackage{titlesec} |
|||
\usepackage{float} |
|||
\usepackage{booktabs} |
|||
\usepackage{array} |
|||
\usepackage{multirow} |
|||
\usepackage{graphicx} |
|||
\usepackage{amsmath} |
|||
\usepackage{listings} |
|||
\input{code_highlight_styling.tex} |
|||
%\usepackage[all]{hypcap} |
|||
%\usepackage{tikz} |
|||
|
|||
\restylefloat{table} |
|||
\hypersetup{colorlinks=true, linkcolor=black, urlcolor=blue, citecolor=blue} |
|||
\urlstyle{same} |
|||
\setlength{\parskip}{\baselineskip} |
|||
%\setlength{\parindent}{0pt} |
|||
|
|||
\title{\large ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ \\ |
|||
\large ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ \\ |
|||
\vspace{5cm} |
|||
\includegraphics[width=\textwidth]{res/fwbLOGO}\\ |
|||
\vspace{5cm} |
|||
\large Ομάδα 13 \\ |
|||
Τρίτο παραδοτέο} |
|||
\titleformat{\chapter} |
|||
{\normalfont\LARGE\bfseries}{\thechapter}{1em}{} |
|||
|
|||
\author{Φανάκης Απόστολος, 8261, apostolof@ece.auth.gr \\ |
|||
Τσάκωνας Γεώργιος Νικόλαος, 8252, tsakonag@ece.auth.gr \\ |
|||
Παπαδιάκος Χαράλαμπος, 8302, charaldp@ece.auth.gr} |
|||
\date{\today} |
|||
|
|||
\pagestyle{fancy} |
|||
\lhead{Βάσεις Δεδομένων 2019} |
|||
|
|||
\begin{document} |
|||
\input{front_page.tex} |
|||
\newpage |
|||
\input{TOC.tex} |
|||
\input{1.0.introduction.tex} |
|||
\input{2.0.coverage.tex} |
|||
\input{3.0.setup.tex} |
|||
\input{4.0.test_case.tex} |
|||
\input{5.0.bugs.tex} |
|||
\input{6.0.unistall.tex} |
|||
\end{document} |
After Width: | Height: | Size: 18 KiB |
Loading…
Reference in new issue