Add upload insurances docs endpoint
This commit is contained in:
parent
7ad3a8a431
commit
d406867201
|
@ -7,4 +7,5 @@ Homestead.yaml
|
|||
/resources/views/vendor
|
||||
/storage/api-docs
|
||||
/public/swagger-ui-assets
|
||||
public/insurances-subscriptions-docs
|
||||
composer.lock
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"name": "nanoSanteService",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
|
@ -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"
|
||||
];
|
||||
|
|
|
@ -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"
|
||||
];
|
||||
|
|
|
@ -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');
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue