Add upload insurances docs endpoint

This commit is contained in:
Djery-Tom 2021-10-21 13:07:35 +01:00
parent 7ad3a8a431
commit d406867201
9 changed files with 146 additions and 1 deletions

1
.gitignore vendored
View File

@ -7,4 +7,5 @@ Homestead.yaml
/resources/views/vendor
/storage/api-docs
/public/swagger-ui-assets
public/insurances-subscriptions-docs
composer.lock

View File

@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\File;
class ImageController extends Controller
{
//'/resources/app/uploads/{filename}'
public function getFile($filename)
{
$path = resource_path() . '/app/uploads/' . $filename;
if (!File::exists($path)) {
return response()->json(['message' => 'Image not found.'], 404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
}
}

View File

@ -14,6 +14,7 @@ use App\Models\NhNetworksConfig;
use App\Traits\Helper;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Log;
@ -339,6 +340,12 @@ class InsuranceController extends Controller
if (!isset($networkConfig) || $networkConfig->configWallet->type != 'ilink_sante')
return $this->errorResponse(trans('errors.nano_health_not_activated'));
// Verification de l'age du beneficiaire
$insuredAge = date_diff(date_create($identification->birthdate), date_create('now'))->y;
if ($insuredAge < $networkConfig->age_limit_of_insured_and_spouse) {
return $this->errorResponse(trans('errors.minimal_age_required'));
}
$networkConfig = NhNetworksConfig::where('network_id', $request->input('network_id'))->first();
if (sizeof($request->input('beneficiaries')) > $networkConfig->max_number_of_beneficiaries)
return $this->errorResponse(trans('errors.number_of_beneficiaries_exceeded'));
@ -389,6 +396,55 @@ class InsuranceController extends Controller
}
/**
* @OA\Post(
* path="/insurances/upload-images",
* summary="Uploader les images de l'assurance",
* tags={"Assurances"},
* security={{"api_key":{}}},
* @OA\RequestBody(
* description="Corps de la requete",
* required=true,
* @OA\MediaType(
* mediaType="multipart/form-data",
* @OA\Schema(
* @OA\Property(
* property="files[]",
* description = "Liste des documents à uploader",
* type="array",
* @OA\Items(type="string", format="binary")
* )
* ),
* )
* ),
* @OA\Response(
* response=200,
* description="OK",
* @OA\JsonContent(
* ref="#/components/schemas/ApiResponse",
* example = {"status":200,"response":"Transaction réussie","error":null}
* )
* )
* )
*/
public function uploadImages(Request $request)
{
$this->validate($request, [
'files' => 'required',
'files.*' => 'mimes:jpeg,png,jpg,jpeg|max:6144'
]);
$files = [];
if ($request->hasfile('files')) {
foreach ($request->file('files') as $file) {
$filename = $this->uploadImage($file, 'NH', 'insurances-subscriptions-docs');
array_push($files, $filename);
}
}
return $this->successResponse($files);
}
private function generateSubscriptionID(): string
{
do {

View File

@ -7,6 +7,7 @@ namespace App\Traits;
use App\Models\Country;
use Brick\Money\Context\AutoContext;
use Brick\Money\Money;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\DB;
trait Helper
@ -49,4 +50,54 @@ trait Helper
$encrypted_password_to_check = base64_encode(sha1($password . $salt, true) . $salt);
return $encrypted_password_to_check == $encrypted_password;
}
public function uploadImage(UploadedFile $file, $imageCode, $folderName)
{
$original_filename = $file->getClientOriginalName();
$original_filename_arr = explode('.', $original_filename);
$file_ext = end($original_filename_arr);
$image = $imageCode . '-' . time() . '.' . $file_ext;
//Check if the directory already exists.
$directoryName = './' . $folderName;
if (!is_dir($directoryName)) {
//Directory does not exist, so lets create it.
mkdir($directoryName, 0755);
}
$compressedImage = $this->compressImage($file, './' . $folderName . '/' . $image, 70);
if ($compressedImage) {
return $image;
} else {
return $this->errorResponse(trans('errors.compression_failed'));
}
}
private function compressImage($source, $destination, $quality)
{
// Get image info
$imgInfo = getimagesize($source);
$mime = $imgInfo['mime'];
// Create a new image from file
switch ($mime) {
case 'image/jpeg':
$image = imagecreatefromjpeg($source);
break;
case 'image/png':
$image = imagecreatefrompng($source);
break;
case 'image/gif':
$image = imagecreatefromgif($source);
break;
default:
$image = imagecreatefromjpeg($source);
}
// Save image
imagejpeg($image, $destination, $quality);
// Return compressed image
return $destination;
}
}

View File

@ -11,7 +11,8 @@
"guzzlehttp/guzzle": "^7.3",
"kitloong/laravel-migrations-generator": "^5.0",
"laravel/lumen-framework": "^8.0",
"ext-json": "*"
"ext-json": "*",
"ext-gd": "*"
},
"require-dev": {
"fakerphp/faker": "^1.9.1",

6
node_modules/.package-lock.json generated vendored Normal file
View File

@ -0,0 +1,6 @@
{
"name": "nanoSanteService",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

View File

@ -25,4 +25,5 @@ return [
'nano_health_not_activated' => "Nano health is not activated for this network",
'number_of_beneficiaries_exceeded' => 'The number of beneficiaries is greater than the authorized limit',
'incorrect_selected_amount' => 'The amount selected is incorrect',
'minimal_age_required' => "You do not have the minimum age required to subscribe to this insurance"
];

View File

@ -25,4 +25,5 @@ return [
'nano_health_not_activated' => "Le nano santé n'est pas activé pour ce réseau",
'number_of_beneficiaries_exceeded' => "Le nombre d'ayant droit est superieur à la limite autorisée",
'incorrect_selected_amount' => 'Le montant choisi est incorrect',
'minimal_age_required' => "Vous n'avez pas l'âge minimum requis pour souscrire à cette assurance"
];

View File

@ -18,5 +18,6 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route
$router->get('countries/{countryId}', 'InsuranceController@getInsurancesByCountryId');
$router->post('bonus-amount', 'InsuranceController@calculateBonusAmount');
$router->post('subscribe', 'InsuranceController@subscribe');
$router->post('upload-images', 'InsuranceController@uploadImages');
});
});