walletserviceExterne/app/Http/Controllers/UserController.php

206 lines
8.4 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Models\ConfigWallet;
use App\Models\Identification;
use App\Models\Network;
use App\Models\NetworksOperator;
use App\Models\TransmittingNetwork;
use App\Models\User;
use App\Models\UsersBankingAccountVerification;
use App\Models\Wallet;
use App\Models\WalletAgent;
use App\Models\WalletIlinkTransaction;
use App\Models\WalletsUser;
use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
use ApiResponser;
use Helper;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
// Trame envoyé lors de la demande de rattachement de l'utilisateur dans le wallet service interne
/**
* @OA\Schema(
* schema="user_link_bank_account_frame",
* title="User - Rattacher le compte bancaire à son wallet - Trame envoyé",
* @OA\Property(property="id_transaction",
* type="string",
* example="KMTCKQHLQE6D",
* minLength = 12,
* maxLength = 12,
* description="ID de la transaction généré dans la base de données"
* ),
* @OA\Property(property="id_wallet_user",
* type="integer",
* minimum = 1,
* example=9,
* description="ID du wallet de l'agent enregistré dans la base de données"
* ),
* @OA\Property(property="id_wallet_network",
* type="integer",
* minimum = 1,
* example=101,
* description="ID du reseau enregistré dans la base de données auquel appartient le wallet"
* ),
* @OA\Property(property="iban",
* type="string",
* minLength = 5,
* maxLength = 34,
* example = "CM15UBAA412341234123412341233",
* description="Identifiant bancaire"
* ),
* @OA\Property(property="id_bank",
* type="integer",
* example=4,
* minimum = 1,
* description="ID de la banque enregistré dans la base de données"
* ),
* @OA\Property(property="lastname",
* type="string",
* description="Noms de l'utilisateur"
* ),
* @OA\Property(property="firstname",
* type="string",
* description="Prenoms de l'utilisateur"
* ),
* @OA\Property(property="type_document_utilisateur",
* type="string",
* description="Type de document que l'utilisateur a fourni pour son identification"
* ),
* @OA\Property(property="id_document_utilisateur",
* type="string",
* description="ID de l'utilisateur sur le document qu'il a fourni pour son identification"
* ),
* @OA\Property(property="country",
* type="string",
* minLength=3,
* default="Cameroon",
* description="Pays de residence de l'utilisateur"
* ),
* @OA\Property(property="town",
* type="string",
* minLength=3,
* default="Douala",
* description="Ville de residence de l'utilisateur"
* ),
*
* )
*/
/**
* @OA\Post(
* path="/confirmUserBankAccount",
* summary="Confirmer le compte bancaire d'un utilisateur ( Reservé uniquement au operateur bancaire )",
* tags={"Confirmer le compte bancaire d'un utilisateur"},
* security={{"api_key":{}}},
* @OA\RequestBody(
* description="Corps de la requete",
* required=true,
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* @OA\Property(property="id_transaction",
* type="string",
* example = "CYS6E5OWBDHC",
* description="ID de la transaction (obtenu lors de la demande de verification)"
* ),
* @OA\Property(property="id_bank",
* type="integer",
* example=4,
* description="ID de la banque enregistré dans la base de données"
* ),
* @OA\Property(property="is_verified",
* type="boolean",
* example=true,
* description="Reponse de la demande de verification"
* ),
* )
* )
* ),
* @OA\Response(
* response=200,
* description="OK",
* @OA\JsonContent(
* ref="#/components/schemas/ApiResponse",
* example = {
* "status" : 200,
* "response" : "Demande traitée avec succès",
* "error":null
* },
* )
* )
* )
*/
// Perment aux operateurs bancaires de confirmer le code iban d'un utilisateur simple, suite à la requete de rattachement qui a été faites
public function confirmUserBankAccount(Request $request)
{
$this->validate($request, [
'id_transaction' => 'required',
'id_bank' => 'required',
'is_verified' => 'required|boolean'
]);
$transaction = UsersBankingAccountVerification::where('id_transaction', $request->id_transaction)->first();
if (!$transaction)
return $this->errorResponse(trans('errors.transaction_not_exist'));
if ($transaction->was_treated)
return $this->errorResponse(trans('errors.treated_demand'));
if ($transaction->id_bank_country != $request->id_bank)
return $this->errorResponse(trans('errors.not_authorized_to_process_request'));
$transaction->is_verified = $request->is_verified;
$user = User::where('user_code', $transaction->user_code)->first();
if (!$user)
return $this->errorResponse(trans('errors.unexpected_error'));
if ($request->is_verified) {
$user->iban = $transaction->iban;
$user->id_bank_country = $transaction->id_bank_country;
$user->save();
}
$transaction->was_treated = true;
$transaction->save();
if($request->is_verified){
$identification = Identification::where('id_user',$user->id)->first();
$owner = isset($identification) ? $identification->lastname.' '.$identification->firstname : $user->lastname.' '.$user->firstname;
$network_bank = NetworksOperator::where('id_network', $transaction->id_network )->where('id_operator_country', $request->id_bank)->first();
$bank = isset($network_bank) ? $network_bank->operators_country->operator->nom : 'n/a';
$country = isset($network_bank) ? $network_bank->network->country->name : 'n/a';
$message = trans('messages.successful_bank_account_attachment_message',
['iban' => $transaction->iban, 'owner' => $owner , 'bank' => $bank , 'country' => $country ]);
$this->sendMail($user->email, trans('messages.successful_bank_account_attachment'), $message);
}else{
$this->sendMail($user->email, trans('messages.failed_bank_account_attachment'), trans('messages.failed_bank_account_attachment_message'));
}
return $this->successResponse(trans('messages.success_treated_demand'));
}
}