{"id":24441843,"url":"https://github.com/kganitis/incident-recorder","last_synced_at":"2026-02-11T20:03:21.571Z","repository":{"id":255684329,"uuid":"852835250","full_name":"kganitis/incident-recorder","owner":"kganitis","description":"RESTful API for recording and managing medical incidents, developed as an assignment for the course 'Medical Informatics' of an M.Sc Program on Informatics.","archived":false,"fork":false,"pushed_at":"2024-10-07T11:23:41.000Z","size":229,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-16T06:51:43.296Z","etag":null,"topics":["api-rest","asp-net-mvc","csharp","entity-framework","sqlite","swagger"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kganitis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-05T14:07:16.000Z","updated_at":"2025-01-13T17:50:07.000Z","dependencies_parsed_at":"2024-09-14T11:49:45.514Z","dependency_job_id":"fae8beb6-4de2-488a-8763-4cdd3d8fb48b","html_url":"https://github.com/kganitis/incident-recorder","commit_stats":null,"previous_names":["kganitis/incidentrecorder","kganitis/incident-recorder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kganitis/incident-recorder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kganitis%2Fincident-recorder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kganitis%2Fincident-recorder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kganitis%2Fincident-recorder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kganitis%2Fincident-recorder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kganitis","download_url":"https://codeload.github.com/kganitis/incident-recorder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kganitis%2Fincident-recorder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273061075,"owners_count":25038596,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","asp-net-mvc","csharp","entity-framework","sqlite","swagger"],"created_at":"2025-01-20T21:27:55.482Z","updated_at":"2026-02-11T20:03:21.522Z","avatar_url":"https://github.com/kganitis.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Incident Recorder API\n\nΤο Incident Recorder είναι ένα **RESTful API**, κατασκευασμένο σε **ASP.NET Core**, για την **καταγραφή και διαχείριση κρουσμάτων** ασθενειών μαζί με όλα τα σχετικά στοιχεία (ασθενείς, συμπτώματα, τοποθεσίες).\n\n## Πίνακας Περιεχομένων\n\n- [Δυνατότητες](#δυνατότητες)\n- [Μεθοδολογία Ανάπτυξης](#μεθοδολογία-ανάπτυξης)\n- [Εγκατάσταση \u0026 Εκτέλεση του API](#εγκατάσταση--εκτέλεση-του-api)\n- [Αρχικοποίηση Βάσης Δεδομένων](#αρχικοποίηση-βάσης-δεδομένων)\n- [API Endpoints](#api-endpoints)\n  - [Ασθένειες](#ασθένειες-diseases)\n  - [Ασθενείς](#ασθενείς-patients)\n  - [Τοποθεσίες](#τοποθεσίες-locations)\n  - [Συμπτώματα](#συμπτώματα-symptoms)\n  - [Κρούσματα](#κρούσματα-incidents)\n- [Παραδείγματα Χρήσης](#παραδείγματα-χρήσης)\n- [Διαχείριση Σφαλμάτων](#διαχείριση-σφαλμάτων)\n- [Διεπαφή Χρήστη με Swagger](#διεπαφή-χρήστη-με-swagger)\n- [Εκτέλεση Test](#εκτέλεση-test)\n- [Μελλοντικό Έργο](#μελλοντικό-έργο)\n\n## Δυνατότητες\n\n- **Καταγραφή και διαχείριση κρουσμάτων** μαζί με όλα τα σχετικά στοιχεία (ασθένειες, ασθενείς, συμπτώματα, τοποθεσίες).\n- Υποστήριξη όλων των βασικών **CRUD Operations** για όλες τις οντότητες.\n- Επικύρωση των δεδομένων εισόδου και εμφάνιση φιλικών προς τον χρήστη μηνυμάτων σφαλμάτων.\n- Τεκμηρίωση και διεπαφή χρήστη μέσω **Swagger**.\n\n## Μεθοδολογία Ανάπτυξης\n\n- Γλώσσα προγραμματισμού **C#**.\n- Χρήση του Microsoft **Entity Framework** και του **ASP.NET Core MVC**.\n- Υλοποίηση της βάσης δεδομένων σε **SQLite**.\n- Χρήση **Data Access Objects** (DTOs) για τη διαχείριση δεδομένων.\n- Προσαρμοσμένα μηνύματα σφαλμάτων για την απόκρυψη ευαίσθητων πληροφοριών.\n- **Unit \u0026 Integration Tests** για κάθε Controller με τη χρήση in-memory databases.\n- **End-to-end tests** μέσω προσαρμοσμένων scripts.\n- Χρήση **Swagger** για την τεκμηρίωση και τη διεπαφή χρήστη.\n- **Git Version Control** καθ' όλη τη διάρκεια της ανάπτυξης.\n\n## Εγκατάσταση \u0026 Εκτέλεση του API\n\nΓια την εγκατάσταση και εκτέλεση του API, βεβαιωθείτε ότι έχετε τα ακόλουθα εγκατεστημένα στον υπολογιστή σας:\n\n- [.NET 8.0 SDK](https://dotnet.microsoft.com/download)\n- [SQLite](https://www.sqlite.org/download.html)\n- Git\n\nΓια να εκτελέσετε τοπικά το API, ακολουθήστε τα παρακάτω βήματα:\n\nΚάνετε clone το git repository:\n\n``` bash\ngit clone https://github.com/kganitis/IncidentRecorder.git\n```\n\nΠεριηγηθείτε στο directory του project:\n\n``` bash\ncd IncidentRecorder/IncidentRecorder\n```\n\nΕνδεχομένως να χρειαστεί να πραγματοποιήσετε επαναφορά των απαιτούμενων πακέτων:\n\n``` bash\ndotnet restore\n```\n\nΕνδεχομένως να χρειαστεί να αρχικοποιήσετε τη βάση δεδομένων και να εφαρμόσετε τα migrations:\n\n``` bash\ndotnet ef database update\n```\n\nΗ εντολή αυτή θα δημιουργήσει τους απαραίτητους πίνακες στη βάση δεδομένων βάσει του τελευταίου migration.\n\nΕκτελέστε το API:\n\n```bash\ndotnet run\n```\n\nΑπό προεπιλογή, το API φιλοξενείται στην τοποθεσία **\u003chttp://localhost:5168\u003e**\nΜπορείτε να προσαρμόσετε τον αριθμό της θύρας από το αρχείο `Properties/launchSettings.json`.\n\n## Αρχικοποίηση Βάσης Δεδομένων\n\nΗ βάση δεδομένων είναι ήδη αρχικοποιημένη με έξι (6) ενδεικτικές οντότητες από κάθε κλάση (κρούσμα, ασθένεια, ασθενής, σύμπτωμα, τοποθεσία).\n\n- Για να **επαναφέρετε** τη βάση δεδομένων, διαγράφοντας όλες τις καταχωρήσεις, εκτελέστε το script\n`IncidentRecorder/IncidentRecorder.Tests/reset-db.bat`.\n\n- Για να **επανατροφοδοτήσετε** τη βάση δεδομένων με τις αρχικές καταχωρήσεις, εκτελέστε το script\n`IncidentRecorder/IncidentRecorder.Tests/seed-data.bat`.\n\n- Μπορείτε να υποβάλλετε αυτοματοποιημένα μία πληθώρα δοκιμαστικών requests, που καλύπτουν όλες τις περιπτώσεις, εκτελώντας το script\n`IncidentRecorder/IncidentRecorder.Tests/test-api.bat`.\n\n    **ΠΡΟΣΟΧΗ**: Φροντίστε πρώτα να πραγματοποιήσετε επαναφορά της βάσης δεδομένων εκτελώντας το script `reset-db.bat`.\n\n## API Endpoints\n\n### Ασθένειες (Diseases)\n\n`GET /api/disease`: Ανάκτηση όλων των ασθενειών.\n\n`GET /api/disease/{id}`: Ανάκτηση ασθένειας με βάση το ID.\n\n`POST /api/disease`: Δημιουργία νέας ασθένειας.\n\n`PUT /api/disease/{id}`: Ενημέρωση υπάρχουσας ασθένειας.\n\n`DELETE /api/disease/{id}`: Διαγραφή ασθένειας.\n\n### Ασθενείς (Patients)\n\n`GET /api/patient`: Ανάκτηση όλων των ασθενών.\n\n`GET /api/patient/{id}`: Ανάκτηση ασθενούς με βάση το ID.\n\n`POST /api/patient`: Δημιουργία νέου ασθενούς.\n\n`PUT /api/patient/{id}`: Ενημέρωση υπάρχοντος ασθενούς.\n\n`DELETE /api/patient/{id}`: Διαγραφή ασθενούς.\n\n### Τοποθεσίες (Locations)\n\n`GET /api/location`: Ανάκτηση όλων των τοποθεσιών.\n\n`GET /api/location/{id}`: Ανάκτηση τοποθεσίας με βάση το ID.\n\n`POST /api/location`: Δημιουργία νέας τοποθεσίας.\n\n`PUT /api/location/{id}`: Ενημέρωση υπάρχουσας τοποθεσίας.\n\n`DELETE /api/location/{id}`: Διαγραφή τοποθεσίας.\n\n### Συμπτώματα (Symptoms)\n\n`GET /api/symptom`: Ανάκτηση όλων των συμπτωμάτων.\n\n`GET /api/symptom/{id}`: Ανάκτηση συμπτώματος με βάση το ID.\n\n`POST /api/symptom`: Δημιουργία νέου συμπτώματος.\n\n`PUT /api/symptom/{id}`: Ενημέρωση υπάρχοντος συμπτώματος.\n\n`DELETE /api/symptom/{id}`: Διαγραφή συμπτώματος.\n\n### Κρούσματα (Incidents)\n\n`GET /api/incident/all`: Ανάκτηση όλων των κρουσμάτων.\n\n`GET /api/incident/{id}`: Ανάκτηση κρούσματος με βάση το ID.\n\n`POST /api/incident/create`: Δημιουργία νέου κρούσματος.\n\n`PUT /api/incident/{id}`: Ενημέρωση υπάρχοντος κρούσματος.\n\n`DELETE /api/incident/{id}`: Διαγραφή κρούσματος.\n\n`GET /api/incident/list`: Ανάκτηση συνοπτικής λίστας κρουσμάτων.\n\n`GET /api/incident/details/{id}`: Ανάκτηση λεπτομερών πληροφοριών για ένα κρούσμα.\n\n## Παραδείγματα χρήσης\n  \n### Ανάκτηση κρούσματος με βάση το ID\n  \n#### `Request`\n\n``` bash\nGET /api/incident/3\n```\n\n#### `Response`\n\n``` json\n{\n  \"id\": 3,\n  \"diseaseName\": \"Malaria\",\n  \"patientName\": \"Maria Konstantinou\",\n  \"location\": \"Rome, Italy\",\n  \"dateReported\": \"2024-09-09T10:00:00Z\",\n  \"symptoms\": [\"Chills\", \"Joint Pain\"]\n}\n```\n\n### Ενημέρωση υπάρχοντος ασθενή με βάση το ID\n\n#### `Request`\n\n``` bash\nPUT /api/patient/2\nContent-Type: application/json\n{\n  \"contactInfo\": \"e.alepis@newemail.com\"\n}\n```\n\n#### `Response`\n\n``` bash\n204 No Content\n```\n\n## Διαχείριση Σφαλμάτων\n\nΤο API υποστηρίζει τους καθιερωμένους HTTP status κωδικούς για τη διαχείριση σφαλμάτων:\n\n- `200 OK`: Το αίτημα ήταν επιτυχές.\n- `201 Created`: Νέο περιεχόμενο δημιουργήθηκε με επιτυχία.\n- `204 No Content`: Το αίτημα ήταν επιτυχές, αλλά δεν υπάρχει περιεχόμενο για επιστροφή.\n- `400 Bad Request`: Το αίτημα δεν μπορούσε να επεξεργαστεί λόγω μη έγκυρης εισόδου.\n- `404 Not Found`: Το περιεχόμενο δεν βρέθηκε.\n- `409 Conflict`: Υπάρχει σύγκρουση, όπως για παράδειγμα μια διπλή καταχώρηση.\n\nΤα validation errors και τα απουσιάζοντα ή μη έγκυρα πεδία επιστρέφουν μηνύματα σφάλματος σε μορφή JSON, για παράδειγμα:\n\n``` json\n{\n  \"title\":\"One or more validation errors occurred.\",\n  \"status\":400,\n  \"detail\":\"The request contains missing or invalid data.\",\n  \"instance\":\"/api/Incident/create\",\n  \"errors\":\n    {\n      \"$\":[\"JSON deserialization was missing required properties, including the following: diseaseId\"]\n    }\n}\n```\n\n## Διεπαφή Χρήστη με Swagger\n\nΓια την τεκμηρίωση του API χρησιμοποιήθηκε το Swagger.\n\nΓια να αλληλεπιδράσετε με τη διεπαφή χρήστη του Swagger και να προβάλλετε την τεκμηρίωση, περιηγηθείτε στην τοποθεσία:\n**\u003chttps://localhost:5168/swagger\u003e**\n\nΑπό εδώ μπορείτε να εξερευνήσετε όλα τα endpoints αναλυτικά, να προβάλλετε τα format των requests και των responses, και να δοκιμάσετε το API απευθείας στον browser σας.\n\n## Εκτέλεση Test\n\nΤο solution περιέχει πληθώρα από **unit** και **integration tests**. Μπορείτε να εκτελέσετε τα test με την ακόλουθη εντολή:\n\n``` bash\ndotnet test\n```\n\nΗ εντολή θα εντοπίσει και εκτελέσει όλα τα test, παρέχοντας αναλυτική ενημέρωση για τα αποτελέσματά τους.\n\n## Μελλοντικό Έργο\n\n- Χρήση **Services** για τον διαχωρισμό της λογικής από τους Controllers.\n- Δημιουργία **Mappers** (π.χ. AutoMapper) για την αυτόματη αντιστοίχιση του μοντέλου στα DTOs.\n- Επέκταση του Data Layer με χρήση **Entities** και **Repositories**.\n- Εισαγωγή ρόλων χρηστών και μηχανισμών **authentication**.\n- Ανάπτυξη ενδεικτικής **front-end εφαρμογής** που θα χρησιμοποιεί το API.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkganitis%2Fincident-recorder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkganitis%2Fincident-recorder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkganitis%2Fincident-recorder/lists"}