Σύστημα παρακολούθησης αθλητών με βιομετρικά δεδομένα, προπονήσεις, τραυματισμούς και ιατρικές εξετάσεις.
Αυτή η εφαρμογή είναι το περιβάλλον διεπαφής (UI) για τη βάση δεδομένων BioDataRace που αναπτύχθηκε στα προηγούμενα παραδοτέα.
- Τεχνολογίες
- Δομή Έργου
- Προαπαιτούμενα
- Οδηγίες Εγκατάστασης
- Οδηγίες Εκτέλεσης
- Σενάρια Χρήσης
- Στοιχεία Login
- Troubleshooting
Για να ξεκινήσετε την εφαρμογή σε 2 λεπτά:
# 1. Εκτελέστε το automated setup script
./setup_database.sh
# 2. Εκκινήστε την εφαρμογή
python3 app.py
# 3. Ανοίξτε τον browser στο http://localhost:5000Login με:
- Coach:
mour@gmail.com - Athlete:
kmit@auth.gr - Doctor:
rak@gmail.com
- Backend: Python 3.8+ με Flask
- Frontend: HTML5, CSS3, Bootstrap 5, JavaScript
- Database: MySQL 8.0+
- Libraries: mysql-connector-python, python-dotenv
Deliverable_2_Team_24/
│
├── app.py # Κύρια εφαρμογή Flask (routes, λογική)
├── config.py # Ρυθμίσεις σύνδεσης με MySQL
├── requirements.txt # Python dependencies
├── .env # Περιβαλλοντικές μεταβλητές (ΔΕΝ κάνετε commit!)
├── .env.example # Παράδειγμα ρυθμίσεων
├── README.md # Αυτό το αρχείο
│
├── Bio_Datarace.sql # SQL schema (από Deliverable 2)
├── Data.sql # Sample data
├── Views.sql # Database views
├── users.sql # MySQL users
├── setup_database.sh # Automated setup script
├── check_db.py # Database verification script
│
└── app/
├── static/
│ ├── css/
│ │ └── style.css # Custom CSS styling
│ └── js/
│ └── main.js # JavaScript functionality
│
└── templates/
├── base.html # Base template
├── login.html # Login page
├── athlete/
│ └── dashboard.html # Athlete dashboard
├── coach/
│ ├── dashboard.html # Coach dashboard
│ └── add_session.html # Add training session
└── doctor/
└── dashboard.html # Doctor dashboard
Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε εγκατεστημένα:
-
Python 3.8 ή νεότερο
python --version # ή python3 --version -
MySQL 8.0 ή νεότερο
mysql --version
-
pip (Python package manager)
pip --version
Χρησιμοποιήστε το αυτοματοποιημένο script για να ρυθμίσετε τα πάντα με μία εντολή:
./setup_database.shΤι κάνει το script:
- Εγκαθιστά το MySQL server (αν δεν υπάρχει)
- Ξεκινάει την MySQL υπηρεσία
- Δημιουργεί τη βάση δεδομένων BioDataRace
- Φορτώνει όλα τα δεδομένα (πίνακες, views, users)
- Ρυθμίζει το αρχείο .env
- Επαληθεύει την εγκατάσταση
Μετά την εκτέλεση του script, μπορείτε να ξεκινήσετε απευθείας την εφαρμογή:
python3 app.pyΑν προτιμάτε να εγκαταστήσετε χειροκίνητα, ακολουθήστε τα παρακάτω βήματα:
Ανοίξτε το terminal στον φάκελο του έργου και εκτελέστε:
pip install -r requirements.txtΑυτό θα εγκαταστήσει:
- Flask (web framework)
- mysql-connector-python (σύνδεση με MySQL)
- python-dotenv (διαχείριση environment variables)
mysql -u root -pΘα σας ζητήσει το password του MySQL root user.
Εκτελέστε τα SQL scripts με τη σειρά:
# Από το terminal (εκτός MySQL)
mysql -u root -p < Bio_Datarace.sql
mysql -u root -p < Data.sql
mysql -u root -p < Views.sql
mysql -u root -p < users.sqlΤι κάνει το καθένα:
Bio_Datarace.sql: Δημιουργεί το schema και τους πίνακεςData.sql: Εισάγει sample δεδομένα (αθλητές, ομάδες, προπονητές, κτλ)Views.sql: Δημιουργεί views για reportsusers.sql: Δημιουργεί MySQL users με διαφορετικά permissions
Ελέγξτε ότι η βάση δημιουργήθηκε επιτυχώς:
mysql -u root -p
USE BioDataRace;
SHOW TABLES;
SELECT * FROM Athletes;cp .env.example .envΑνοίξτε το αρχείο .env με έναν text editor και συμπληρώστε τα στοιχεία σας:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=το_δικό_σας_mysql_password
DB_NAME=BioDataRace
SECRET_KEY=κάποιο_τυχαίο_string_για_ασφάλειαΑπό το terminal, στον φάκελο του έργου:
python app.pyΑναμενόμενο Output:
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.x.x:5000
- Ανοίξτε τον browser σας (Chrome, Firefox, Edge)
- Πηγαίνετε στο: http://localhost:5000
- Θα δείτε τη σελίδα login
Πατήστε Ctrl + C στο terminal.
Χρησιμοποιήστε τα παρακάτω emails για να συνδεθείτε ως διαφορετικοί ρόλοι:
- Email:
kmit@auth.gr - Όνομα: Kostas Mitroglou
- Άθλημα: Football
- Βλέπει: Προσωπικά δεδομένα, προπονήσεις, βιομετρικά, τραυματισμούς
- Email:
mour@gmail.com - Όνομα: Mourinho
- Ομάδα: PAOK
- Βλέπει: Αθλητές ομάδας, προπονήσεις, στατιστικά
- Μπορεί να: Προσθέσει νέες προπονήσεις
- Email:
rak@gmail.com - Όνομα: Kostas Marinos
- Ειδικότητα: Pathologist
- Βλέπει: Τραυματισμούς, βιολογικές εξετάσεις
- Μπορεί να: Προσθέσει τραυματισμούς, εξετάσεις, ενημερώσει status
Σημείωση: Για demo σκοπούς, δεν απαιτείται password. Σε πραγματική εφαρμογή θα χρησιμοποιούσαμε password hashing.
- Login με
kmit@auth.gr - Βλέπει το dashboard με:
- Προσωπικά στοιχεία
- Ιστορικό προπονήσεων
- Βιομετρικά δεδομένα (καρδιακός ρυθμός, βήματα, θερμίδες)
- Δείκτες απόδοσης (VO2 max)
- Τραυματισμούς
- Login με
mour@gmail.com - Κλικ στο "Add New Training Session"
- Επιλογή αθλητή από τη λίστα
- Συμπλήρωση:
- Ημερομηνία/ώρα
- Τύπος προπόνησης (π.χ. "Strength Training")
- Διάρκεια (π.χ. 90 λεπτά)
- Ένταση (Low/Medium/High)
- Κλικ "Create Session"
- Η προπόνηση προστίθεται στη βάση
- Login με
rak@gmail.com - Στο dashboard, στην ενότητα "Add New Injury Record":
- Επιλογή αθλητή
- Ημερομηνία συμβάντος
- Περιγραφή (π.χ. "Ankle sprain")
- Status: "Injured"
- Recovery plan (π.χ. "Rest 2 weeks")
- Κλικ "Add Injury"
- Ο τραυματισμός εμφανίζεται στα "Active Injuries"
- Login με
rak@gmail.com - Στα "Active Injuries", βρίσκει τον τραυματισμό
- Κλικ "Mark Recovered"
- Το status αλλάζει από "Injured" → "Recovered"
- Ο τραυματισμός μετακινείται στο "Complete Injury History"
Δομή:
- Database Connection (γραμμές 8-16): Συνάρτηση που συνδέεται με MySQL
- Authentication Routes (γραμμές 50-80): Login/Logout λογική
- Athlete Routes (γραμμές 85-150): Queries για δεδομένα αθλητή
- Coach Routes (γραμμές 155-250): Queries για προπονητή + προσθήκη sessions
- Doctor Routes (γραμμές 255-350): Queries για γιατρό + προσθήκη injuries/tests
Παράδειγμα SQL Query στον κώδικα:
cursor.execute("""
SELECT a.*, t.team_name
FROM Athletes a
LEFT JOIN Teams t ON a.team_id = t.team_id
WHERE a.athlete_id = %s
""", (athlete_id,))- base.html: Βασικό template με navbar, footer
- Άλλα templates: Extend το base.html και προσθέτουν το content τους
Jinja2 Templating:
{% for session in sessions %}
<tr>
<td>{{ session.date }}</td>
<td>{{ session.type }}</td>
</tr>
{% endfor %}Custom CSS που συμπληρώνει το Bootstrap για:
- Card animations
- Custom colors
- Responsive design
- Table styling
Αν αντιμετωπίζετε προβλήματα με τη βάση δεδομένων, χρησιμοποιήστε το verification script:
python3 check_db.py
# ή
db_venv/bin/python check_db.pyΑυτό θα σας δείξει:
- Αν η σύνδεση στη βάση λειτουργεί
- Ποιοι χρήστες υπάρχουν στη βάση (coaches, athletes, doctors)
- Πιθανά προβλήματα με το MySQL
Αιτία: Το Flask δεν βρίσκει τα HTML templates στον σωστό φάκελο.
Λύση: Αυτό το πρόβλημα έχει διορθωθεί. Το app.py έχει ρυθμιστεί να αναζητά templates στο app/templates/.
Αν το πρόβλημα παραμένει, βεβαιωθείτε ότι η γραμμή 6 του app.py περιλαμβάνει:
app = Flask(__name__, template_folder='app/templates', static_folder='app/static')Λύση:
pip install -r requirements.txtΑιτία: Η βάση δεδομένων είναι άδεια ή το MySQL δεν τρέχει.
Λύση:
- Βεβαιωθείτε ότι το MySQL τρέχει:
sudo systemctl status mysql
- Αν δεν τρέχει, ξεκινήστε το:
sudo systemctl start mysql
- Ελέγξτε αν η βάση έχει δεδομένα:
python3 check_db.py
- Αν η βάση είναι άδεια, εκτελέστε το setup script:
./setup_database.sh
Λύση:
- Ελέγξτε ότι το password στο
.envείναι σωστό - Δοκιμάστε:
mysql -u root -pγια να επιβεβαιώσετε το password
Λύση:
- Βεβαιωθείτε ότι το MySQL server τρέχει:
# Linux sudo systemctl start mysql # Windows (από Services) # Βρείτε "MySQL" και κάντε Start
Λύση:
- Εκτελέστε ξανά τα SQL scripts:
mysql -u root -p < Bio_Datarace.sql mysql -u root -p < Data.sql
Λύση:
- Αλλάξτε το port στο
app.py(τελευταία γραμμή):app.run(debug=True, host='0.0.0.0', port=5001)
- Μετά: http://localhost:5001
Λύση:
- Κάντε hard refresh:
Ctrl + Shift + R(ήCmd + Shift + Rσε Mac) - Ελέγξτε ότι ο φάκελος
app/static/υπάρχει
- Προβολή προσωπικών πληροφοριών
- Ιστορικό προπονήσεων
- Βιομετρικά δεδομένα (real-time από wearables)
- Δείκτες απόδοσης (VO2 max, fat %, reaction time)
- Ιστορικό τραυματισμών
- Διαχείριση ομάδων
- Προβολή αθλητών
- Δημιουργία νέων προπονήσεων
- Στατιστικά καρδιακού ρυθμού (από view)
- Ιστορικό προπονήσεων
- Προβολή ενεργών τραυματισμών
- Προσθήκη νέων τραυματισμών
- Ενημέρωση status (Injured → Recovered)
- Καταχώρηση βιολογικών εξετάσεων
- Πλήρες ιστορικό