===== 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 called ''facility_name'').
- The ''devices'' table and ''device_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. The ''Api\AuthDeviceController'' handlers are guarded by the ''auth:api'' middleware which is followed by the ''device.resolve'' middleware which translates each request with a token to the corresponding device model and adds a timestamp to the ''last_seen'' column of the ''devices'' 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.