Το Incident Recorder είναι ένα RESTful API, κατασκευασμένο σε ASP.NET Core, για την καταγραφή και διαχείριση κρουσμάτων ασθενειών μαζί με όλα τα σχετικά στοιχεία (ασθενείς, συμπτώματα, τοποθεσίες).
- Δυνατότητες
- Μεθοδολογία Ανάπτυξης
- Εγκατάσταση & Εκτέλεση του API
- Αρχικοποίηση Βάσης Δεδομένων
- API Endpoints
- Παραδείγματα Χρήσης
- Διαχείριση Σφαλμάτων
- Διεπαφή Χρήστη με Swagger
- Εκτέλεση Test
- Μελλοντικό Έργο
- Καταγραφή και διαχείριση κρουσμάτων μαζί με όλα τα σχετικά στοιχεία (ασθένειες, ασθενείς, συμπτώματα, τοποθεσίες).
- Υποστήριξη όλων των βασικών CRUD Operations για όλες τις οντότητες.
- Επικύρωση των δεδομένων εισόδου και εμφάνιση φιλικών προς τον χρήστη μηνυμάτων σφαλμάτων.
- Τεκμηρίωση και διεπαφή χρήστη μέσω Swagger.
- Γλώσσα προγραμματισμού C#.
- Χρήση του Microsoft Entity Framework και του ASP.NET Core MVC.
- Υλοποίηση της βάσης δεδομένων σε SQLite.
- Χρήση Data Access Objects (DTOs) για τη διαχείριση δεδομένων.
- Προσαρμοσμένα μηνύματα σφαλμάτων για την απόκρυψη ευαίσθητων πληροφοριών.
- Unit & Integration Tests για κάθε Controller με τη χρήση in-memory databases.
- End-to-end tests μέσω προσαρμοσμένων scripts.
- Χρήση Swagger για την τεκμηρίωση και τη διεπαφή χρήστη.
- Git Version Control καθ' όλη τη διάρκεια της ανάπτυξης.
Για την εγκατάσταση και εκτέλεση του API, βεβαιωθείτε ότι έχετε τα ακόλουθα εγκατεστημένα στον υπολογιστή σας:
- .NET 8.0 SDK
- SQLite
- Git
Για να εκτελέσετε τοπικά το API, ακολουθήστε τα παρακάτω βήματα:
Κάνετε clone το git repository:
git clone https://github.com/kganitis/IncidentRecorder.git
Περιηγηθείτε στο directory του project:
cd IncidentRecorder/IncidentRecorder
Ενδεχομένως να χρειαστεί να πραγματοποιήσετε επαναφορά των απαιτούμενων πακέτων:
dotnet restore
Ενδεχομένως να χρειαστεί να αρχικοποιήσετε τη βάση δεδομένων και να εφαρμόσετε τα migrations:
dotnet ef database update
Η εντολή αυτή θα δημιουργήσει τους απαραίτητους πίνακες στη βάση δεδομένων βάσει του τελευταίου migration.
Εκτελέστε το API:
dotnet run
Από προεπιλογή, το API φιλοξενείται στην τοποθεσία http://localhost:5168
Μπορείτε να προσαρμόσετε τον αριθμό της θύρας από το αρχείο Properties/launchSettings.json
.
Η βάση δεδομένων είναι ήδη αρχικοποιημένη με έξι (6) ενδεικτικές οντότητες από κάθε κλάση (κρούσμα, ασθένεια, ασθενής, σύμπτωμα, τοποθεσία).
-
Για να επαναφέρετε τη βάση δεδομένων, διαγράφοντας όλες τις καταχωρήσεις, εκτελέστε το script
IncidentRecorder/IncidentRecorder.Tests/reset-db.bat
. -
Για να επανατροφοδοτήσετε τη βάση δεδομένων με τις αρχικές καταχωρήσεις, εκτελέστε το script
IncidentRecorder/IncidentRecorder.Tests/seed-data.bat
. -
Μπορείτε να υποβάλλετε αυτοματοποιημένα μία πληθώρα δοκιμαστικών requests, που καλύπτουν όλες τις περιπτώσεις, εκτελώντας το script
IncidentRecorder/IncidentRecorder.Tests/test-api.bat
.ΠΡΟΣΟΧΗ: Φροντίστε πρώτα να πραγματοποιήσετε επαναφορά της βάσης δεδομένων εκτελώντας το script
reset-db.bat
.
GET /api/disease
: Ανάκτηση όλων των ασθενειών.
GET /api/disease/{id}
: Ανάκτηση ασθένειας με βάση το ID.
POST /api/disease
: Δημιουργία νέας ασθένειας.
PUT /api/disease/{id}
: Ενημέρωση υπάρχουσας ασθένειας.
DELETE /api/disease/{id}
: Διαγραφή ασθένειας.
GET /api/patient
: Ανάκτηση όλων των ασθενών.
GET /api/patient/{id}
: Ανάκτηση ασθενούς με βάση το ID.
POST /api/patient
: Δημιουργία νέου ασθενούς.
PUT /api/patient/{id}
: Ενημέρωση υπάρχοντος ασθενούς.
DELETE /api/patient/{id}
: Διαγραφή ασθενούς.
GET /api/location
: Ανάκτηση όλων των τοποθεσιών.
GET /api/location/{id}
: Ανάκτηση τοποθεσίας με βάση το ID.
POST /api/location
: Δημιουργία νέας τοποθεσίας.
PUT /api/location/{id}
: Ενημέρωση υπάρχουσας τοποθεσίας.
DELETE /api/location/{id}
: Διαγραφή τοποθεσίας.
GET /api/symptom
: Ανάκτηση όλων των συμπτωμάτων.
GET /api/symptom/{id}
: Ανάκτηση συμπτώματος με βάση το ID.
POST /api/symptom
: Δημιουργία νέου συμπτώματος.
PUT /api/symptom/{id}
: Ενημέρωση υπάρχοντος συμπτώματος.
DELETE /api/symptom/{id}
: Διαγραφή συμπτώματος.
GET /api/incident/all
: Ανάκτηση όλων των κρουσμάτων.
GET /api/incident/{id}
: Ανάκτηση κρούσματος με βάση το ID.
POST /api/incident/create
: Δημιουργία νέου κρούσματος.
PUT /api/incident/{id}
: Ενημέρωση υπάρχοντος κρούσματος.
DELETE /api/incident/{id}
: Διαγραφή κρούσματος.
GET /api/incident/list
: Ανάκτηση συνοπτικής λίστας κρουσμάτων.
GET /api/incident/details/{id}
: Ανάκτηση λεπτομερών πληροφοριών για ένα κρούσμα.
GET /api/incident/3
{
"id": 3,
"diseaseName": "Malaria",
"patientName": "Maria Konstantinou",
"location": "Rome, Italy",
"dateReported": "2024-09-09T10:00:00Z",
"symptoms": ["Chills", "Joint Pain"]
}
PUT /api/patient/2
Content-Type: application/json
{
"contactInfo": "[email protected]"
}
204 No Content
Το API υποστηρίζει τους καθιερωμένους HTTP status κωδικούς για τη διαχείριση σφαλμάτων:
200 OK
: Το αίτημα ήταν επιτυχές.201 Created
: Νέο περιεχόμενο δημιουργήθηκε με επιτυχία.204 No Content
: Το αίτημα ήταν επιτυχές, αλλά δεν υπάρχει περιεχόμενο για επιστροφή.400 Bad Request
: Το αίτημα δεν μπορούσε να επεξεργαστεί λόγω μη έγκυρης εισόδου.404 Not Found
: Το περιεχόμενο δεν βρέθηκε.409 Conflict
: Υπάρχει σύγκρουση, όπως για παράδειγμα μια διπλή καταχώρηση.
Τα validation errors και τα απουσιάζοντα ή μη έγκυρα πεδία επιστρέφουν μηνύματα σφάλματος σε μορφή JSON, για παράδειγμα:
{
"title":"One or more validation errors occurred.",
"status":400,
"detail":"The request contains missing or invalid data.",
"instance":"/api/Incident/create",
"errors":
{
"$":["JSON deserialization was missing required properties, including the following: diseaseId"]
}
}
Για την τεκμηρίωση του API χρησιμοποιήθηκε το Swagger.
Για να αλληλεπιδράσετε με τη διεπαφή χρήστη του Swagger και να προβάλλετε την τεκμηρίωση, περιηγηθείτε στην τοποθεσία: https://localhost:5168/swagger
Από εδώ μπορείτε να εξερευνήσετε όλα τα endpoints αναλυτικά, να προβάλλετε τα format των requests και των responses, και να δοκιμάσετε το API απευθείας στον browser σας.
Το solution περιέχει πληθώρα από unit και integration tests. Μπορείτε να εκτελέσετε τα test με την ακόλουθη εντολή:
dotnet test
Η εντολή θα εντοπίσει και εκτελέσει όλα τα test, παρέχοντας αναλυτική ενημέρωση για τα αποτελέσματά τους.
- Χρήση Services για τον διαχωρισμό της λογικής από τους Controllers.
- Δημιουργία Mappers (π.χ. AutoMapper) για την αυτόματη αντιστοίχιση του μοντέλου στα DTOs.
- Επέκταση του Data Layer με χρήση Entities και Repositories.
- Εισαγωγή ρόλων χρηστών και μηχανισμών authentication.
- Ανάπτυξη ενδεικτικής front-end εφαρμογής που θα χρησιμοποιεί το API.