This is an old revision of the document!
Table of Contents
medAL-data Integration details
In this section we summarize the components that have been integrated into medAL-data's Laravel web server.
Back-end Changes
The back-end changes consists of the following additions:
- Model and Controller for Health Facilities and Devices
Laravel Passport
plugin- New service classes to perform the business logic for:
- Algorithms
- Devices
- Health Facilities
AuthDeviceController
which is the controller used for most of the Passport-protected API routes for devices.
Passport Installation
In order to install passport, we had to make slight changes to the laravel version currently used by this server. Originally, the composer.json
file had the following version:
"require": { ... "laravel/framework": "6.0.*", ... },
Which we changed to:
"require": { .... "laravel/framework": "^6.20.26", ... },
for the passport installation to work properly.
After changing the composer.json
, we run composer update
followed by composer require laravel/passport
which successfully installed passport's back-end routes. The routes used for Passport are then registered in the AuthServiceProvider.php
provider class where we only used the routes necessary for our desired functionality.
Database Migrations
The new migrations are the following:
- New nullable columns are added to the pre-existing
health_facilities
table that are used to manage health facilities. Moreover, a name column has been added (as the pre-existing was unconventionally calledfacility_name
). - The
devices
table anddevice_types
table have been created to store device information. - The health_facility_accesses table has been created to store all the algorithm versions metadata that have been assigned to health facilities.
- The
version_jsons
table has been created to store the version's json files that are then fetched by the devices.
Services
- The
DeviceService
class is used to make the link between a Device model and Passport's Client model, which represent OAuth clients. This service is also used to resolve a Device model from a token that is part of the request. - The
HealthFacilityService
class is used to assign and unassign devices. - The
AlgorithmService
class is used to fetch algorithms and versions from the medAL-creator server and assign versions to health facilities.
For more information, the service classes are properly commented in App/Http/Services
.
Controllers
The newly controllers are the following:
- The
DeviceController
handles requests for creating editing and deleting devices. - The
HealthFacilityController
handles request for creating, editing and deleting health facilities. Additionally, it handles algorithm related-requests and assignment/unassignment of devices. - The
Api\AuthDeviceController
handles requests coming from authenticated devices to fetch their health facility information, upload their device information and get their algorithm versions.
Middlewares and Policies
The DeviceController
and HealthFacilityController
are guarded by the web
and auth
and permission
:
- middleware (only users with the
Logistician
role hold these permissions). Additionally, handles authorize slug requests depending on policies that only allow a user to modify its own resources. TheApi\AuthDeviceController
handlers are guarded by theauth:api
middleware which is followed by thedevice.resolve
middleware which translates each request with a token to the corresponding device model and adds a timestamp to thelast_seen
column of thedevices
table.
Requests and Resources
For creating and editing devices and health facilities, custom request classes have been created to validate the request. Moreover, when returning device models to the front-end it is first converted to a Device resource which omits some fields and translates others for the user.
Roles
The Logistician
role has been added with has permissions to reset its own password, view its user information, manage health facilities and devices.
Front-end Changes
The existing front-end has been extended with two new dashboard accessible to logistician users, Devices and Health Facilities. Both dashboard are made of reactive vue components.
Upgrade Laravel-Mix
The version of Laravel mix previously declared in package.json
was making the node compilation failed (on heroku) so it has been changed to : “laravel-mix”: “^5.0.1”,
after which the command npm install
is run to update the dependencies.